Я пытаюсь запустить метод, когда _pageControl.currentPage
находится на точном номере страницы, но проблема в том, что пользователь прокручивает страницу на другой странице, компилятор обнаруживает новую страницу во время прокрутки! Мне нужно запустить мой метод при прокрутке! вот мой код:Проблема с UIPageControl и scrollViewDidScroll
- (void)setupPageScroll {
_pageControl.currentPage = 0;
_pageControl.numberOfPages = 5;
[_scrollView setContentSize:CGSizeMake(_scrollView.frame.size.width * _pageControl.numberOfPages, _scrollView.frame.size.width)];
_scrollView.delegate = self;
[self createPageWithView:_logo forPage:0];
[self createPageWithView:_news forPage:1];
}
- (void)createPageWithView:(UIView *)iview forPage:(int)page
{
UIView *newView = [[UIView alloc] initWithFrame:
CGRectMake(_scrollView.frame.size.width * page, 0, _scrollView.frame.size.width, _scrollView.frame.size.height)];
[newView addSubview:iview];
[_scrollView addSubview:newView];
}
- (IBAction)pageChanged:(id)sender {
CGRect pageRect = CGRectMake(_pageControl.currentPage * _scrollView.frame.size.width, 0, _scrollView.frame.size.width, _scrollView.frame.size.height);
[_scrollView scrollRectToVisible: pageRect animated: YES];
}
- (void)scrollViewDidScroll: (UIScrollView *) sView
{
CGFloat offset = _scrollView.contentOffset.x;
CGFloat pageSize = _scrollView.frame.size.width;
int page = floor((offset + (pageSize/2))/pageSize);
_pageControl.currentPage = page;
switch (_pageControl.currentPage) {
case 0:
NSLog(@"1");
break;
case 1:
NSLog(@"2");
break;
default:
break;
}
}
здесь является результатом компилятора:
2014-08-27 13: 48: 35,344 TADAEX [45131: 60b] 1 2014-08-27 13: 48: 35,361 TADAEX [45131: 60b] 1 2014-08-27 13: 48: 35.378 TADAEX [45131: 60b] 1 2014-08-27 13: 48: 37.248 TADAEX [45131: 60b] 1 2014-08-27 13: 48: 37.265 TADAEX [45131: 60b] 1 2014-08-27 13: 48: 37.282 TADAEX [45131: 60b] 1 2014-08-27 13: 48: 37.299 TADAEX [45131: 60b] 2 2014-08- 27 13: 48: 38.076 TADAEX [45131: 60b] 2 2014-08-27 13: 48: 38.076 TADAEX [45131: 60b] 2 2014-08-27 13: 48: 38.076 ТАДАЭКС [45131: 60b] 2 2014-08-27 13: 48: 38.076 TADAEX [45131: 60b] 2 2014-08-27 13: 48: 38.076 TADAEX [45131: 60b] 2
, как вы видите, повторители компилятора дают NSLog
выход! а не когда pageControl находится на точном номере страницы.
Да, это нормально. scrollViewDidScroll запускается во время прокрутки пользователя. – idmean
Лучшая опция - использование if - else вместо случая Switch. вы можете сделать это, если (page == 1) -> NSLog (@ "1"); – Mohit