2009-11-29 7 views
10

Мне нужно использовать UIPagecontrol для моего приложения, и я не уверен, как начать работу. Я новичок, и примеры, которые дает мне яблоко, довольно сложны. Все, что мне нужно, это 3 страницы с разными видами для каждого из них. Может кто-нибудь помочь мне здесь?Как использовать UIPageControl для создания нескольких видов?

P.S. помните, что я новичок!

ответ

3

Вот хороший example от Cocoa With Love. Он воспроизводит только 2 фактических представления, что обеспечивает низкую площадь памяти.

+0

Прошу прощения за нижний предел, теперь ссылка снова работает. – hariseldon78

22

Вы хотите использовать UIScrollView, а затем, в качестве брата, расположите UIPageControl над ним. Затем поместите каждую из ваших страниц в прокрутку и включите пейджинг. Таким образом, каждый «щелчок» перемещает прокрутку на одну страницу.

Теперь назначьте свой контроллер просмотра делегатом прокрутки и просмотрите scrollViewDidEndScrollAnimation и используйте contentOffset, чтобы определить, какая страница является текущей.

+4

ничего себе, что кажется сложной задачей. у вас есть учебник для этого или пример кода, чтобы я мог видеть, как это выглядит? – lab12

1

Смотрите мой ответ здесь: Is UIPageControl Useless By Itself?

для многократного использования класса, инкапсулирующего UIPageControl и UIScrollView.

+0

Привет, похоже, что вы сделали очень хорошую работу, создав этот класс. Я новичок, и я не могу полностью окунуться в то, как вы рассказываете, какие UIviews должны быть включены (я их выложил в IB). – Hippocrates

+0

Вам нужно будет реализовать PagedViewDelegate точно так же, как вы будет реализовывать UITableViewDelegate. Метод cellForRowAtIndexPath теперь заменяется viewForPageAtIndex. Вы можете реализовать его с помощью оператора switch и загрузить представление из соответствующего nib, используя [[NSBundle mainBundle] loadNibNamed: <имя файла nib> владелец: nil] –

15

Основываясь на довольно превосходном правильном ответе Бена Готтлиба, я получил то, что хотел. Вот код, который я использовал для ее выполнения:

.h

@interface MyViewController : UIViewController <UIScrollViewDelegate> { 
} 
@property (nonatomic, retain) UIPageControl *helpPageCon; 

.m

@synthesize helpPageCon; 

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{ 
    CGRect frame = [[UIScreen mainScreen] applicationFrame]; 
    float roundedValue = round(scrollView.contentOffset.x/frame.size.width); 
    self.helpPageCon.currentPage = roundedValue;  
} 

- (void)viewDidLoad 
{ 
    UIScrollView *scrollView = [[[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height-50)] autorelease]; 
    scrollView.contentSize = CGSizeMake(frame.size.width*5, frame.size.height-50); 
    [scrollView setPagingEnabled:YES]; 
    scrollView.showsHorizontalScrollIndicator = NO; 
    scrollView.delegate = self; 
    [self.view addSubview:scrollView]; 

    CGRect frame = [[UIScreen mainScreen] applicationFrame]; 
    self.helpPageCon = [[[UIPageControl alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, 50)] autorelease]; 
    self.helpPageCon.center = CGPointMake(frame.size.width/2, frame.size.height-75); 
    self.helpPageCon.numberOfPages = 5; 
    [self.view addSubview:self.helpPageCon]; 
} 
- (void)dealloc 
{ 
    [super dealloc]; 
    [helpPageCon release]; 
} 
3

Просто добавьте 3 вида к виду прокрутки по горизонтали одна за другой с подкачкой включена в Scrollview и добавить элемент управления UIPageControl под scrollView, и с помощью обоих методов делегирования scrollview и метода действия просмотра страниц вы можете достичь базовой работы UIPageControl

Я использовал контент, чтобы найти текущую страницу

// scrollview delegate 

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 

    CGFloat pageWidth = mainScroll.frame.size.width; 
    int page = floor((mainScroll.contentOffset.x - pageWidth/2)/pageWidth) + 1; 
    pageControl.currentPage=page; 

    } 

    // page view action method 

    - (IBAction)pageControlInteracted:(UIPageControl *)sender { 
     NSLog(@"%d",sender.currentPage); 
     CGRect frame = mainScroll.frame; 
     frame.origin.x = frame.size.width * sender.currentPage; 
     frame.origin.y = 0; 
     [mainScroll scrollRectToVisible:frame animated:YES]; 

    } 
Смежные вопросы