像 Instagram 一样限制 UITableView 滚动速度

2024-03-02

我正在尝试限制 UITableView 的滚动速度,就像 Instagram 所做的那样。

如果你查看 Instagram,你会发现他们对滚动信息流的速度有限制。

它不是使用“decelerationRate”设置的,因为限制不会影响减速度。它只会影响您滚动浏览提要的速度。因此,如果您尝试执行“轻拂”手势,您将达到 Instagram 的最大滚动速度,并且不会像普通 UITableView 中那样快。

你猜 Instagram 是如何实现这一目标的?


TableView有一个属性scrollView,该属性将返回TableView的内部scrollView。使用以下...

tableview.scrollView.decelerationRate = UIScrollViewDecelerationRateFast;

其他方式:

TableView将响应scrollView委托,因此我们需要实现scrollView的委托,如下所示:

采用这些全局变量:

CGPoint lastOffset;
NSTimeInterval lastOffsetCapture;
BOOL isScrollingFast;

实施scrollViewDidScroll like :

- (void) scrollViewDidScroll:(UIScrollView *)scrollView {    
    CGPoint currentOffset = scrollView.contentOffset;
    NSTimeInterval currentTime = [NSDate timeIntervalSinceReferenceDate];

    NSTimeInterval timeDiff = currentTime - lastOffsetCapture;
    if(timeDiff > 0.1) {
        CGFloat distance = currentOffset.y - lastOffset.y;
        //The multiply by 10, / 1000 isn't really necessary.......
        CGFloat scrollSpeedNotAbs = (distance * 10) / 1000; //in pixels per millisecond

        CGFloat scrollSpeed = fabsf(scrollSpeedNotAbs);
        if (scrollSpeed > 0.5) {
            isScrollingFast = YES;
            NSLog(@"Fast");
        } else {
            isScrollingFast = NO;
            NSLog(@"Slow");
        }        

        lastOffset = currentOffset;
        lastOffsetCapture = currentTime;
    }
}

然后实施scrollViewDidEndDragging像这样 :

- (void) scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    if( !decelerate )
    {
        NSUInteger currentIndex = (NSUInteger)(scrollView.contentOffset.x / scrollView.bounds.size.width);

        [scrollView setContentOffset:CGPointMake(scrollView.bounds.size.width * currentIndex, 0) animated:YES];
    }
}

希望这可以帮助你...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

像 Instagram 一样限制 UITableView 滚动速度 的相关文章

  • 如何在 Swift 3 中解析 JSON 数组 [重复]

    这个问题在这里已经有答案了 我从 Socket 获取了一些我想访问的数据 但收到错误消息 指出每次都无法将 NSArray 转换为 NSDictionary struct SocketEventHandler let event Strin
  • 这个错误是无效上下文0x0吗?

    我在ViewDidLoad中编写了以下代码 Implement viewDidLoad to do additional setup after loading the view typically from a nib void view
  • 自动布局、UIDynamics 和动画

    我对自动布局还很陌生 并且对如何为视图设置动画感到困惑 我读了很多 我知道你必须遵守限制 编辑它 然后包装layoutIfNeeded in an UIView动画块 但当真正要做的时候 我却有点失落 我很乐意有人能向我解释如何做这个动画
  • UITextFieldDelegate 与 UITextField 控件事件

    如果我想处理 UITextField 的更改 例如用户在其中键入 看起来这可以通过将委托分配给该文本字段 然后让委托实现 shouldChangeCharactersInRange 来完成 或者通过将目标添加到文本字段并处理 UIContr
  • iOS 11 安全区域布局指南向后兼容性

    启用安全区域布局指南是否与 iOS 11 以下版本兼容 我设法使用新的安全区域布局指南并保持与 iOS 9 和 iOS 10 的向后兼容性 编辑 正如 NickEntin 的评论所指出的 此实现将假定存在状态栏 但在 iPhone X 的横
  • iOS中的performSelector有什么用

    的作用是什么执行选择器 比较 self btnClicked and self performSelector selector btnClicked void btnClicked NSLog Method Called 两者都对我来说工
  • Transit MKDirectionsRequest 产生 null 错误 Error Domain=MKErrorDomain Code=5 "(null)"

    我正在尝试使用 MapKit Directions Request 来获取两个坐标之间的交通方向 当我切换到其他 非 Transit 类型时 下面的代码可以工作 但是当我切换到 Transit 时 它会抛出一个错误 该错误在 Apple 文
  • Objective Flickr 照片上传错误

    我正在使用 ObjectiveFlickr 库将照片从我的 iPhone 应用程序上传到 Flickr 我可以授权该应用程序并执行一般请求 但在尝试上传照片时遇到错误 要上传的照片是使用 AVFoundation 捕获的图像 这是相关代码
  • 如何从代码隐藏中设置 CarouselView 的项目?

    我有一个 CarouselView 它绑定到图像的 ItemsSource 但我想通过更改 CarouselView 的索引来更改当前显示的图像 我尝试使用 CarouselView Position 作为必须选择的元素的索引 但不幸的是这
  • 无法使用 Xamarin 和 WCF 访问 Web 服务

    我想使用 Xamarin 和 WCF 来使用公共 Web 服务 对于这个演示 我将使用Xamarin iOS 这是我试图使用的 公共 网络服务 http www webservicex net globalweather asmx WSDL
  • SpriteKitPhysicsBody非矩形碰撞

    pipeUp physicsBody SKPhysicsBody rectangleOfSize pipeUp size 在此编码中我使用了rectangleOfSize对于碰撞物理体 但如果我想按像素仅使用图像的形状 我应该使用什么而不是
  • PrepareForSegue之谜

    我在两个不同的 VC 中有一个prepareForSegue 方法 一个使用一个if声明 而另一个旨在使用switch 除了名称之外 代码几乎相同 这个效果很好 void prepareForSegue UIStoryboardSegue
  • 对使用phonegap和钛的质疑[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 最近我听说了 PhoneGap 和 Titanium 移动网络应用程序的开发 我分析了这两个 Web 应用程序 并了解了如何使用它们以
  • Xcode 9 中的“addingPercentEncoding”是否损坏?

    在 Swift 3 x 和 Xcode 9 beta 2 中 使用addingPercentEncoding https developer apple com documentation swift string 1690785 addi
  • 当您感兴趣的任务完成时,是什么让完成处理程序执行该块?

    我一直在询问并试图了解完成处理程序是如何工作的 我用过很多 也读过很多教程 我将在这里发布我使用的代码 但我希望能够创建自己的代码 而无需使用其他人的代码作为参考 我理解这个完成处理程序 其中调用者方法 void viewDidLoad n
  • Swift 中通过不同类调用委托方法

    我正在获取 JSON 菜单 一旦 JSON 返回 我想运行 menuReady 来更新表的内容在 SomeTableViewController 类中 但下面的代码似乎不起作用 AIM Run 菜单就绪 JSON 返回后更新内容 PROBL
  • 我应该在哪个方法中设置 UITextField 的委托?

    在 viewDidLoad 或 init 方法中设置 UITextField 的委托是一个好习惯吗 我尝试在 init 方法中将委托设置为 self 但它没有调用相应的委托方法 当我将代码移动到 viewDidLoad 中时 它注册为将 s
  • 如何通过辅助功能 API 获取当前所选文本的全局屏幕坐标。

    我需要帮助来了解字典应用程序如何在任何应用程序上按 CMD CTRL D 时显示所选文本的以下弹出对话框 我想实施 我的可可应用程序具有相同的功能 我的应用程序将在后台运行 并显示有关所选文本的一些热键的建议 我已经实现了热键捕获 我只需要
  • 在 iOS 上从 GPS 获取时间

    我正在开发一个跟踪器应用程序 该应用程序需要高精度地了解设备位置 即它使用位置服务并忽略水平精度低于 20 米的位置 CLLocation没有明确声明是否通过 GPS 确定 但是 如果水平精度为 20 米或更好 则可以认为它是来自 GPS
  • 为什么这个 SKPhysicsJointPin 不能将这 2 个精灵保持在一起?

    我显然不太了解 SKPhysicsJoint 但是除了 Apple 文档之外 网上的信息还很少 下面的代码有什么问题 我认为应该保持头部和颈部永久连接 我的意图是它们就像两张带有大头针的纸 这样它们可以旋转一点 但不仅仅是完全分开 当我运行

随机推荐

  • 在哪里下载 MySQLdump.ext 比 mysqldump.exe 版本 5.7.1.7 更新的版本

    尝试通过 MySQL Workbench 转储简单数据库 方法是单击 服务器 gt 数据导出 gt mydb gt 开始导出 获取消息 mysqldump 版本不匹配 该消息显示这些版本 mysqldump exe 版本 5 7 1 7 M
  • 如何让我的 Yubikey 在 Windows 10 中与 SSH 配合使用?

    在出于技术兴趣购买了 Yubikey 5 NFC 固件 5 2 7 并尽可能设置 FIDO2 身份验证后 我遇到了无法再通过 SmartGit 连接到我的 GitLab 服务器的问题 因为没有请求第二个因素 因此我无法连接到服务器 然后我决
  • Neo4j gem - 处理管理关系的首选方法

    这主要是一个设计 效率问题 但我想看看在 Neo4j 中是否有一种首选方法来处理这个问题 而不是在 sql 数据库中如何处理 现在我有 2 个模型 user and event 我之间也有关系user and event表示他们将参加该活动
  • 在 groovy shell 中使用 groovy 类别

    我正在使用 Groovy 类别在一些 DSL 下工作 我想找到一种方法来使用我的 DSL 和 groovy shell 而无需显式编写use MyCategory myObject doSomething 对于每个命令 例如 假设我有以下玩
  • 使用 JPA 从表中删除所有行

    我想使用 JPA 删除特定表中的所有行 我做了什么 public class EmptyBomTables extends HttpServlet private static final long serialVersionUID 1L
  • 如何同步向mongo插入数据(Nodejs、Express)

    我在使用 node express 将数据插入 mongodb 时遇到问题 我的代码如下所示 router get data section sort function req res next Deleting old data alwa
  • Python3 openpyxl 将包含特定值的行中的数据复制到现有工作簿中的新工作表

    我正在尝试将其中包含特定值的行复制到新工作表中 在查看下面列出的参考资料时 我能够确定如何使用 ws append 进行复制 但这在脚本中无法正常运行 我想做的是迭代 wb 如果它具有特定值 则创建另一个工作表并将该行复制到该工作表 我将不
  • 在函数中使用 Config::set() 两次的方法

    我已经用谷歌搜索和 stackoverflowed 如果可以的话 来解决这个问题 但找不到足够简洁的答案 一些参考文献 Laravel 4 当使用 Config set 更改 auth model 时 Auth user 不起作用 http
  • Swift - 合并订阅未被调用

    最近 我尝试使用freshOS 网络 https github com freshOS Networking快捷的包裹 我读了好几次自述文件 但无法让它与我一起工作 我正在尝试获取使用公共 API 服务的国家 地区列表 这就是我所做的 Mo
  • 使用 AJAX 更新部分视图

    我有一个包含许多图像的页面 每个图像都有一个关联的文本框 用于提交该图像上的标签 每个图像和文本框都是通过局部视图呈现的 目前 我可以更新标签 并且通过整页刷新一切正常 我希望能够通过 AJAX 完成这一切 但我遇到了一些麻烦 这是部分视图
  • 部署时 ClientId 未更新 - 用户注入 null

    我正在使用 OAuth 2 0 创建一个包含 App Engine 和 Cloud EndPoints 的项目 我创建并配置了所有 clientId WEB Android 和 iOS 但是当我在本地运行服务器或部署到 App Engine
  • 为什么自定义 css 类不适用于 React-Semantic-UI 元素?

    我用react semantic ui创建了卡片 我想通过css类添加一些额外的样式 一个例子是 我添加带有 box shadow 属性的自定义 card 类 但未应用该样式 HTML PART import App css CLAIM C
  • 在Android上播放音频RTMP流

    有没有人在 Android 上成功播放音频 RTMP 流http code google com p android rtmp client http code google com p android rtmp client或知道任何其他
  • 避免jsp中的java.lang.IllegalStateException

    我尝试在 jsp 中下载生成的 pdf 但是我的日志显示以下错误 我如何避免此错误 我的代码和错误如下 List
  • 更新到 PHP 5.3,禁用不推荐使用的函数警告

    我非常渴望将我们的一些服务器更新到 PHP 5 3 这将为 Zend Framework 2 以及明显的性能更新做好准备 不幸的是 我在这些服务器上有大量遗留代码 这些代码会及时修复 但在迁移之前无法全部修复 我正在考虑更新但禁用除少数开发
  • Laravel Composer 更新内存不足

    我正在尝试使用 phpcomposer phar update 命令更新 laravel 存储库 但我收到这个错误 Removing symfony translation v2 4 8 PHP Fatal error Uncaught e
  • 为捕获的图像创建单独的文件夹时出现 FileUriExposedException

    我正在尝试使用下面的代码将相机捕获的图像存储在单独的文件夹中 但是当我执行此代码时 我遇到异常 我尝试了很多方法来获取解决方案 但没有用 有人可以帮助我吗 android os FileUriExposeException file sto
  • 为什么 nvcc 无法使用 boost::spirit 编译 CUDA 文件?

    我正在尝试将 CUDA 集成到使用 boost spirit 的现有应用程序 隔离问题后 我发现以下代码无法使用 nvcc 编译 main cu include
  • 从 WebView 在本机 Soundcloud 应用程序中打开 Soundcloud URL

    Scenario 我的 Android 应用程序中有一个 WebView 其中包含 Soundcloud 嵌入 来自 Embedly 该嵌入有两个按钮 在 Soundcloud 上播放 和 在浏览器中收听 在 Soundcloud 上播放
  • 像 Instagram 一样限制 UITableView 滚动速度

    我正在尝试限制 UITableView 的滚动速度 就像 Instagram 所做的那样 如果你查看 Instagram 你会发现他们对滚动信息流的速度有限制 它不是使用 decelerationRate 设置的 因为限制不会影响减速度 它