Как объединить UIScrollview с UIPagecontrol для отображения разных представлений?

Я искал и искал учебник для этого, но ни один из них не то, что я ищу. Я пробовал образец Apple, но это всего лишь цвета, и я не знаю, как заставить его просматривать. Все, что я ищу, - это экран, на котором будет отображаться страница при отображении элемента управления страницей. Каждый раз, когда прокручиваются страницы просмотра, я хочу, чтобы они отображали совершенно другой вид с кнопками, очень похожий на домашний экран iPhone. Я нашел приведенный ниже пример кода, который очень хорошо работает только с изображениями, но я хотел бы изменить для работы с отдельными представлениями. Пожалуйста помоги! Спасибо.

- (void)setupPage {
    scrollView.delegate = self;

    [self.scrollView setBackgroundColor:[UIColor clearColor]];
    [scrollView setCanCancelContentTouches:NO];

    scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
    scrollView.clipsToBounds = YES;
    scrollView.scrollEnabled = YES;
    scrollView.pagingEnabled = YES;

    NSUInteger nimages = 0;
    CGFloat cx = 0;
    for (; ; nimages++) {
        NSString *imageName = [NSString stringWithFormat:@"image%d.jpg", (nimages + 1)];                
        UIImage *image = [UIImage imageNamed:imageName];
        if (image == nil) {
            break;
        }
        UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

        CGRect rect = imageView.frame;
        rect.size.height = image.size.height;
        rect.size.width = image.size.width;
        rect.origin.x = ((scrollView.frame.size.width - image.size.width) / 2) + cx;
        rect.origin.y = ((scrollView.frame.size.height - image.size.height) / 2);

        imageView.frame = rect;

        [scrollView addSubview:imageView];
        [imageView release];

        cx += scrollView.frame.size.width;
    }

    self.pageControl.numberOfPages = nimages;
    [scrollView setContentSize:CGSizeMake(cx, [scrollView bounds].size.height)];
}

person thenameisnick    schedule 09.12.2010    source источник
comment
Я не уверен, зачем вам нужен элемент управления разбиением по страницам, поскольку в scrollview он встроен. Если вы пытаетесь создать элемент управления страницей в scrollview, вам нужно будет добавить новый просмотр страницы, как вы это делаете с просмотром изображений   -  person Burf2000    schedule 10.12.2010
comment
@ Burf2000: С каких это пор у UIScrollView появился UIPageControl?   -  person BoltClock    schedule 10.12.2010


Ответы (4)


Я экспериментировал с этим буквально на днях. Я все еще привыкаю использовать UIScrollView, но вот как вы можете добавить представления в свой UIScrollView:

UIView *blueView = [[UIView alloc] init];
blueView.frame = CGRectMake(100, 0, 500, 1024);
blueView.backgroundColor = [UIColor colorWithRed:164.0/256 green:176.0/256 blue:224.0/256 alpha:1];
[scrollView addSubview:blueView];
[blueView release];

UIView *orangeView = [[UIView alloc] init];
orangeView.frame = CGRectMake(700, 0, 500, 1024);
orangeView.backgroundColor = [UIColor colorWithRed:252.0/256 green:196.0/256 blue:131.1/256 alpha:1];
[scrollView addSubview:orangeView];
[orangeView release];

Обратите внимание, что я устанавливаю значение x в frame.origin каждого представления, чтобы они располагались рядом друг с другом. Вы также должны установить размер содержимого UIScrollView с чем-то вроде [scrollView setContentSize:CGSizeMake(1200, 1024)];, чтобы он знал, насколько велики его подпредставления.

Затем, если вам нужно управлять UIPageControl, вы должны установить для его numberOfPages значение 2 (для примера прокрутки выше) и изменить его свойство currentPage. Вы можете сделать это, реализовав scrollViewDidEndDecelerating:, который является методом в UIScrollViewDelegate. Вы можете проверить, на какой «странице» находится прокрутка, проверив ее значение contentOffset.x.

Надеюсь это поможет!

person donkim    schedule 12.12.2010
comment
У меня отлично сработала модифицированная версия этой концепции. Спасибо! - person thenameisnick; 15.12.2010

Вот код Apple PageControl с изображениями. Чтобы использовать, просто перетащите свои изображения в проект. По умолчанию используются изображения image1.jpg, image2.jpg и т. Д. Если вам нужен png, просто измените расширение на .png.

Затем замените код MyViewController.m этим кодом, и вы получите управление страницей с изображениями.

Привет, Иордания

http://pastebin.com/raw.php?i=c3hS29sC

person Jordan    schedule 10.12.2010
comment
Я пытаюсь загрузить просмотры ВМЕСТО изображений. Приведенный выше код уже работает с изображениями. Спасибо. - person thenameisnick; 10.12.2010
comment
Где вы получаете просмотры? Вы создаете их с нуля или загружаете из перьев? - person Jordan; 10.12.2010
comment
Желательно загружать их из перьев. - person thenameisnick; 11.12.2010

// Добавление UIView в пример PageControl

  - (id)initWithPageNumber:(int)page {
        UIScreen *screen = [UIScreen mainScreen];
        CGRect frame = [screen applicationFrame];
        frame.origin.y=0;

        if (self = [super initWithNibName:@"MyView" bundle:nil]) {      
                UIView *view = [[UIView alloc] initWithFrame:frame];

                [self.view addSubview:view];

                            // Add whatever you want to the view here.
                [view release];
            pageNumber = page;
        }
        return self;
    }
person Jordan    schedule 10.12.2010

Вот еще ответ ...

NSArray* nibViews =  [[NSBundle mainBundle] loadNibNamed:@"Views" owner:self options:nil];
infoView = [nibViews objectAtIndex:0];
[self.view addSubview:infoView];

Тогда у вас есть свое мнение.

Ваше здоровье

person Jordan    schedule 10.12.2010