iphone: как добавить текст выше и ниже изображения в scrollvew? - PullRequest
0 голосов
/ 29 сентября 2011

Я хотел бы добавить номер страницы над изображением, например "1 из 50", и описание изображения под изображением в просмотре прокрутки.

Я смотрел на эту ССЫЛКУ , но все еще не мог понять, как это сделать.

вот мой пример кода скроллвью изображений. Я пытаюсь найти образец, который может добавить текст и прокручивать изображения

NSUInteger i;
        for (i = 1; i <= kNumImages; i++)
        {
                NSString *imageName = [NSString stringWithFormat:@"images%d.jpg", i];
                UIImage *image = [UIImage imageNamed:imageName];
                UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

                // setup each frame to a default height and width, it will be properly placed when we call "updateScrollList"
                CGRect rect = imageView.frame;
                rect.size.height = kScrollObjHeight;
                rect.size.width = kScrollObjWidth;
                imageView.frame = rect;
                imageView.tag = i;  // tag our images for later use when we place them in serial fashion
                [scrollView1 addSubview:imageView];
                [imageView release];
        }

UPDATE:

const CGFloat kScrollObjHeight  = 320;
const CGFloat kScrollObjWidth   = 280.0;
const NSUInteger kNumImages     = 50;


- (void)layoutScrollImages
{
UIImageView *view = nil;
NSArray *subviews = [scrollView1 subviews];

// reposition all image subviews in a horizontal serial fashion
CGFloat curXLoc = 0;
for (view in subviews)
{
        if ([view isKindOfClass:[UIImageView class]] && view.tag > 0)
        {
                CGRect frame = view.frame;
                frame.origin = CGPointMake(curXLoc, 0);
                view.frame = frame;

                curXLoc += (kScrollObjWidth);
        }
}
- (void)viewDidLoad {

        self.view.backgroundColor = [UIColor viewFlipsideBackgroundColor];

        // 1. setup the scrollview for multiple images and add it to the view controller
        //
        // note: the following can be done in Interface Builder, but we show this in code for clarity
        [scrollView1 setBackgroundColor:[UIColor blackColor]];
        [scrollView1 setCanCancelContentTouches:NO];
        scrollView1.indicatorStyle = UIScrollViewIndicatorStyleWhite;
        scrollView1.clipsToBounds = YES;        // default is NO, we want to restrict drawing within our scrollview
        scrollView1.scrollEnabled = YES;

        // pagingEnabled property default is NO, if set the scroller will stop or snap at each photo
        // if you want free-flowing scroll, don't set this property.
        scrollView1.pagingEnabled = YES;

        // load all the images from our bundle and add them to the scroll view
        NSUInteger i;
        for (i = 1; i <= kNumImages; i++)
        {
                NSString *imageName = [NSString stringWithFormat:@"creative%d.jpg", i];
                UIImage *image = [UIImage imageNamed:imageName];
                UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

                // setup each frame to a default height and width, it will be properly placed when we call "updateScrollList"
                CGRect rect = imageView.frame;
                rect.size.height = kScrollObjHeight;
                rect.size.width = kScrollObjWidth;
                imageView.frame = rect;
                imageView.tag = i;  // tag our images for later use when we place them in serial fashion
                [scrollView1 addSubview:imageView];
                [imageView release];
        }

        [self layoutScrollImages];

Я хотел поставить это, но не смог найти правильное положение или правое смещение для отображения вверху

UILabel * topLabel = [[UILabel alloc] init];
            topLabel.text = [NSString stringWithFormat:@"%d of %d", i, kNumImages];
            rect.origin.x = offset;
            rect.size.height = 30; // however large you need the label to be
            topLabel.frame = rect;
            offset += 30;

1 Ответ

1 голос
/ 29 сентября 2011

Я думаю, что-то вроде этого будет работать:

    float offset = 0;
    for (NSUInteger i = 1; i <= kNumImages; i++)
    {
            // load up the image
            NSString *imageName = [NSString stringWithFormat:@"images%d.jpg", i];
            UIImage *image = [UIImage imageNamed:imageName];
            UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

            // image.size is important here and used to determine placement
            CGRect rect = imageView.frame;
            rect.size = image.size;

            // create top label, just basic will need to configure other settings like font
            UILabel * topLabel = [[UILabel alloc] init];
            topLabel.text = [NSString stringWithFormat:@"%d of %d", i, kNumImages];
            rect.origin.x = offset;
            rect.size.height = 30; // however large you need the label to be
            topLabel.frame = rect;
            offset += 30; // adding the label height

            // set image frame since we now know the location below top label            
            rect.size = image.size;
            rect.origin.x += offset;
            imageView.frame = rect;
            imageView.tag = i;
            offset += image.size.height; // adding image height

            // add bottom label below image
            UILabel * bottomLabel = [[UILabel alloc] init];
            bottomLabel.text = imageName; // just a sample description
            rect.origin.x += offset;
            rect.size.height = 30; // however large you need the label to be
            bottomLabel.frame = rect;
            offset += 30; // adding the label height

            [scrollView1 addSubview:topLabel];
            [scrollView1 addSubview:imageView];
            [scrollView1 addSubview:bottomLabel];
            [imageView release];
            [topLabel release];
            [bottomLabel release];

            offset += 20; // arbitrary spacing between images
    }
...