UIViews с UIPageControl - PullRequest
       19

UIViews с UIPageControl

6 голосов
/ 21 января 2011

Я начинающий, когда дело доходит до контроля страниц, и поэтому я не уверен на 100%, согласен ли мой заголовок с тем, что я хочу. Я хочу сделать UIPageControl, который, когда пользователь проведет пальцем по экрану, вид переключится на другой вид, и UIPageController в нижней части экрана будет обновляться сам. Кроме того, чтобы сделать мой запрос еще более запутанным, я хочу, чтобы панель вкладок в нижней части экрана оставалась на месте при изменении вида.

Прекрасным примером этого является Чемпион рампы The Iconfactory: http://img.slidetoplay.com/screenshots/ramp-champ_5.jpg

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

РЕДАКТИРОВАТЬ: я знаю, что я должен использовать UISrollView, я просто не знаю, как его реализовать ...

Ответы [ 2 ]

22 голосов
/ 21 января 2011

Я считаю, что на самом деле вы ищете UIScrollView с pagingEnabled, установленным в YES. Вы можете оставить вид прокрутки как вид над обычным UITabBar. Вы будете использовать UIPageControl, чтобы получить маленькие точки. Вы можете обновлять его программно, когда UIScrollView прокручивает страницу, реализуя соответствующий метод делегата в представлении прокрутки, например, -scrollViewDidScroll:.

Предположим, у вас есть два ivars: scrollView и pageControl. Когда вы знаете, сколько страниц будет иметь ваше представление прокрутки, вы можете установить размер содержимого scrollView. Он должен быть кратным границам scrollView. Например, если число страниц является статическим, вы можете жестко закодировать его в -viewDidLoad ...

- (void)viewDidLoad {
    // Any other code.

    scrollView.pagingEnabled = YES;
    scrollView.contentSize = CGSizeMake(scrollView.bounds.size.width * 3, scrollView.bounds.size.height); // 3 pages wide.
    scrollView.delegate = self;
}

Затем, чтобы обновить ваши маленькие точки ...

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

    CGFloat pageWidth = scrollView.bounds.size.width;
    NSInteger pageNumber = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
    pageControl.currentPage = pageNumber;
}
2 голосов
/ 22 января 2011

Вам необходимо использовать UIScrollView

Предполагается, что у вас есть именованный ивар с именем scrollView

    int amountOfFrames = 10;
    scrollView.pagingEnabled = TRUE;
scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * amountOfFrames, scrollView.frame.size.height);
     scrollView.delegate = self;

Затем вам нужно будет реализовать необходимые методы делегата, чтобы вы могли обновить свой элемент управления страницей

- (void)scrollViewDidScroll:(UIScrollView *)sender 
{
    // Switch the indicator when more than 50% of the previous/next page is visible
    CGFloat pageWidth = scrollView.frame.size.width;
    int page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
    pageControl.currentPage = page; 
}

Вам нужно поместить любой контент, который вы хотите прокручивать, в эти scrollview, в идеале, в lazyload, если отображаемому контенту потребуется много кучи памяти, используйте scrollviewDidScroll для удаления и добавления контента в требуемые позиции

...