如何检测 UIScrollView 的下一页编号为'scrollView.pagingEnabled' = YES?在'scrollViewDidEndDragging'?

Posted

技术标签:

【中文标题】如何检测 UIScrollView 的下一页编号为\'scrollView.pagingEnabled\' = YES?在\'scrollViewDidEndDragging\'?【英文标题】:How can I detect next page number of UIScrollView which is 'scrollView.pagingEnabled' = YES? in 'scrollViewDidEndDragging'?如何检测 UIScrollView 的下一页编号为'scrollView.pagingEnabled' = YES?在'scrollViewDidEndDragging'? 【发布时间】:2013-04-25 14:42:23 【问题描述】:

我在***上搜索了一些东西,比如

CGFloat pageWidth = scrollView.frame.size.width;
int pageNumberToBeScrolled = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
if (pageNumberToBeScrolled != 1) 
    // Do what I want

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;

但这只有在我缓慢滚动时才有效,因此滚动页面肯定会移动到一半以上。如果我像滑动一样快速滚动,这将不起作用。我只是滚动了30%的滚动页面,这并不能满足那里的情况,但是它滚动到了下一页,我想检测它。

如何检测或捕获所有scroll-to-next-page 情况?请给我一些帮助:)

编辑

我正在研究这个,因为我想在滚动到下一页时播放效果声音。我应该在手指离开屏幕后立即检测到,并且仅用于下一页滚动。我想如果我在scrollViewDidEndDragging 上处理这个问题,那对我最好:)

【问题讨论】:

【参考方案1】:

我正在使用这段代码来检测 currentPage 是否发生了变化,不管你滚动得很快还是很慢。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
        static NSInteger previousPage = 0;
        CGFloat pageWidth = scrollView.frame.size.width;
        float fractionalPage = scrollView.contentOffset.x / pageWidth;
        NSInteger page = lround(fractionalPage);
        NSLog(@"%d",page);
        if (previousPage != page) 
            previousPage = page;
            /* Page did change */
          

【讨论】:

感谢您的回答 :) 我正在编写您的代码以用于我的项目,不幸的是,这不适合我的。 ` 我想play an effect sound 解释我的EDIT part。我必须检测我的手指何时离开屏幕,但如果我使用您的代码,/* Page did change */ 部分称为while my finger on the screen 并左右移动以移动半个滚动视图。然后我的应用程序继续播放效果声音。你能在scrollViewDidEndDragging 上解决这个问题吗?如果我用那个方法处理这个,最好:) mstfbsnli ,您的代码终于帮我解决了我的情况。谢谢你的努力;-) 它似乎工作正常,但我遇到了与 steven 类似的问题 - 我必须检测我的手指何时离开屏幕,但如果我使用你的代码,/* 页面确实改变了 */ 部分当我的手指在屏幕上时打电话。大家解决这个问题了吗?在这种情况下我该怎么办?【参考方案2】:

试试这样可能对你有帮助

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

        float fractionalPage = scrollView.contentOffset.x / 320;
        NSInteger page1 = lround(fractionalPage);
        NSLog(@"%d",page1);

【讨论】:

320 ?当设备是 iPad 或用户旋转设备时它会工作吗? 此代码检测下一页。谢谢@Sunny。还有@mstfbsnli,我认为如果320 -> [UIScreen mainscreen].bounds.size.width 会起作用。但问题是,我想在手指离开屏幕后立即抓住它。调用- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate; 的时间相同。 @Sunny,你能帮我解决这个时间问题吗? 320 -> scrollView.frame.size.width?

以上是关于如何检测 UIScrollView 的下一页编号为'scrollView.pagingEnabled' = YES?在'scrollViewDidEndDragging'?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 UIScrollView Xcode 的 ContentOffSet

如何跳转到 PrintDocument 的下一页?

UIScrollView 检测滚动

如何访问本网站的下一页?

如何检测用户是不是在 UIScrollView 中回滚了一个视图?

如何有条件地转到pageViewController中的下一页?