ios - UIPageControl 和 scrollViewDidScroll 有问题

标签 ios objective-c iphone xcode uiscrollview

我试图在 _pageControl.currentPage 处于准确的页码时触发一个方法,但问题是当用户滚动到另一个页面时,编译器在滚动时检测到新页面!滚动完成时我需要触发我的方法!这是我的代码:

- (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 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

如您所见,编译器重复提供 NSLog 输出!不是当 pageControl 位于确切的页码时。

最佳答案

你可以在这个委托(delegate)方法中做到这一点

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
//Tells the delegate that the scroll view has ended decelerating the scrolling movement.
}

关于ios - UIPageControl 和 scrollViewDidScroll 有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25523382/

相关文章:

ios - 在视差标题上滚动时添加模糊效果(Swift)

ios - 在 Swift 中,如何在删除 ARSCNView 后让内存恢复正常?建筑套件

iphone - UINavigationController 中的 Cocos2d 项目

ios - 在 uiwindow subview 之上呈现 View Controller

iphone - 丰富的 UITextView 中不显示文本属性 (iOS 6)

ios - 我如何打印出存储在数组中的对象的内容,而不是像这样的内容 <(Object Name) : 0x10010ff10>?

ios - NSString cString 已弃用。有什么选择?

objective-c - 如何在测试中将父类的扩展函数用于我自己的子类?

objective-c - iOS 钥匙串(keychain),存储更多 kSecValueData 项

iphone - 如何从 UIWebView 获取选择文本?