禁用 UICollectionView 中 UIAttachmnetBehavior 的垂直移动

2023-12-20

我尝试在水平 UICollectionView 中模仿消息应用程序弹簧动画

我在 UICollectionViewFlowLayout 子类中使用了 UIAttachmentBehavior。但问题是,当我水平滚动时,单元格也会垂直和水平移动,以某种方式进行旋转运动!

我已经遵循了这个教程:
使用 uikitdynamics 实现有弹性的 uicollectionviewlayout http://www.teehanlax.com/blog/implementing-a-bouncy-uicollectionviewlayout-with-uikit-dynamics/

并在我的collectionView中使用。我还关注了 WWDC 2013 session 217-Exploring Scroll Views on iOS 7。但问题仍然存在!
有谁知道我应该如何解决这个问题?

-(id)initWithCoder:(NSCoder *)aDecoder{
self = [super initWithCoder:aDecoder];
if (self){
    _dynamicAnimator = [[UIDynamicAnimator alloc] initWithCollectionViewLayout:self];
}
return self;
}

- (void)prepareLayout{

    [super prepareLayout];

    CGSize contentSize = [self collectionViewContentSize];
    NSArray *items = [super layoutAttributesForElementsInRect:CGRectMake(0, 0, contentSize.width, 500)];

    if (items.count != _dynamicAnimator.behaviors.count) {
        [_dynamicAnimator removeAllBehaviors];

        for (UICollectionViewLayoutAttributes *item in items) {
            UIAttachmentBehavior *springBehavior = [[UIAttachmentBehavior alloc] initWithItem:item attachedToAnchor:item.center];
            springBehavior.length = 0.f;
            springBehavior.damping = 0.5f;
            springBehavior.frequency = 0.8f;

            [_dynamicAnimator addBehavior:springBehavior];
        }
    }
}

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect{
    return [_dynamicAnimator itemsInRect:rect];
}

- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath{
    return [_dynamicAnimator layoutAttributesForCellAtIndexPath:indexPath];
}

- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds{
    CGFloat scrollDelta = newBounds.origin.x - self.collectionView.bounds.origin.x;
    CGPoint touchLocation = [self.collectionView.panGestureRecognizer locationInView:self.collectionView];

for (UIAttachmentBehavior *springBehavior in _dynamicAnimator.behaviors) {
    CGPoint anchorPoint = springBehavior.anchorPoint;
    CGFloat touchDistance = fabsf(touchLocation.x - anchorPoint.x);
    CGFloat resistanceFactor = 0.002;

    UICollectionViewLayoutAttributes *attributes = springBehavior.items.firstObject;

    CGPoint center = attributes.center;

    float resistedScroll = scrollDelta * touchDistance * resistanceFactor;
    float simpleScroll = scrollDelta;

    float actualScroll = MIN(abs(simpleScroll), abs(resistedScroll));
    if(simpleScroll < 0){
        actualScroll *= -1;
    }

    center.x += actualScroll;
    attributes.center = center;

    [_dynamicAnimator updateItemUsingCurrentState:attributes];
}

    return NO;
}

我的应用程序中也遇到了同样的问题。问题是这一行:UIAttachmentBehavior *springBehavior = [[UIAttachmentBehavior alloc] initWithItem:item attachedToAnchor:item.center];

问题是该项目的中心返回带小数的浮点数。然后,iOS 将它们四舍五入为小数点后 0 的浮点数,导致锚点无法很好地居中,因此项目会反弹。

解决方案是在锚定项目之前确保其框架的高度和宽度可被二整除。然后验证 item.center 返回的 X 和 Y 值是没有小数的浮点数,并且动画可以正常工作。

注意:即使在 iOS7 中工作完美,我在 iOS8 中也看到了与此类似的问题,并且此解决方案不起作用。

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

禁用 UICollectionView 中 UIAttachmnetBehavior 的垂直移动 的相关文章

  • 我可以使用 lambda 函数或 std::function 对象来代替函数指针吗?

    我有一个需要使用的库 它定义了以下内容 typedef void CallbackFunction const int i 并且有一个注册回调的函数 如下所示 void registerCallback CallbackFunction p
  • MySqlConnectionStringBuilder - 使用证书连接

    我正在尝试连接到 Google Cloud Sql 这是一个 MySql 解决方案 我能够使用 MySql Workbench 进行连接 我如何使用 C 连接MySqlConnectionStringBuilder 我找不到提供这三个证书的
  • Docker - 如何通过 API 将输入发送到程序

    我一直在使用 Docker 的远程 API 创建一个容器 在其中运行一个 Python 程序 附加到该容器并将写入 stdout 的输出流式传输到网络 现在 我希望我的 Python 程序接受来自 stdin 的用户输入 例如 import
  • 如何在 PowerShell 中将长命令拆分为多行

    如何在 PowerShell 中获取如下所示的命令并将其拆分为多行 C Program Files IIS Microsoft Web Deploy msdeploy exe verb sync source contentPath c w
  • python sklearn中的fit方法

    我问自己关于 sklearn 中拟合方法的各种问题 问题1 当我这样做时 from sklearn decomposition import TruncatedSVD model TruncatedSVD svd 1 model fit X
  • 如何获取所有mysql元组结果并转换为json

    我能够从表中获取单个数据 但是当我试图获取表上的所有数据时 我只得到一行 cnn execute sql rows cnn fetchall column t 0 for t in cnn description for row in ro
  • Android ClassNotFoundException:在路径上找不到类

    10 22 15 29 40 897 E AndroidRuntime 2561 FATAL EXCEPTION main 10 22 15 29 40 897 E AndroidRuntime 2561 java lang Runtime
  • 在构建内核模块时为什么需要 /lib/modules? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在Kbuild树中 当我们编写一个简单的hello ko程序时 为什么我们需要在构建规则中使用 C lib module 为什么需要这样做
  • VBA全局类变量

    我的障碍是试图让多个子程序识别类变量 当我尝试全局声明它们时 出现编译错误 无效的外部过程 然后 当我运行公共函数或子函数来声明变量时 它们在其他子函数中保持未定义状态 我希望多个子程序能够识别变量 因为它们的值应该通过用户窗体进行更改 然
  • 使用部分字符串匹配进行 Firebase 查询[重复]

    这个问题在这里已经有答案了 假设我有一个简单的 firebase 实时数据库结构 其中关键是username其值为userid 现在我想搜索userid by username 如果用户名匹配 这很容易 但如何获得部分匹配的答案 更清楚地说
  • SQLite 中的累积求和值

    我正在尝试在 SQLite 中执行值的累积和 我最初只需要对一列求和并获得代码 SELECT t MyColumn SELECT Sum r KeyColumn1 FROM MyTable as r WHERE r Date lt t Da
  • SSIS 包失败并出现“无法获取连接”错误

    我们有一个从 Web 服务启动的 SSIS 包 在开发环境中 一切正常 但在 QA 环境中 尝试运行包时出现以下错误 无法获取连接 ConnectionName 连接可能未正确配置 或者您可能没有正确的权限这个连接 连接使用 SQL 登录
  • 长/宽数据到宽/长

    我有一个数据框 如下所示 import pandas as pd d decil 1 decil 1 decil 2 decil 2 decil 3 decil 3 decil kommune AA BB AA BB AA BB 2010
  • Postgresql:SERIAL 在约束 INSERT 失败时递增

    有一个像这样的简单表结构 CREATE TABLE test id INT PRIMARY KEY sid SERIAL 我注意到如果我尝试插入一行但它未通过约束测试 即主键约束 SERIAL计数器无论如何都会增加 所以下一次成功插入 si
  • 如何在控制器中获取f.submit的名称参数?

    我创建了 form html erb 其中的编码如下 是的 我确实有两个相同表单的提交 并且它们都有 更新 和 销毁 等名称 当用户按下销毁按钮时 books controller 中的更新操作将被调用 并判断是 更新 还是 销
  • Wordpress - 通过检查用户状态从外部 bbPress 更改论坛角色

    我想检查用户状态并相应更新他们的 bbPress 论坛角色 不是 WordPress 角色 目的是向 BP Registration Options 插件添加功能 以调节用户注册 在 BuddyPress 中 目前 该插件在用户未经批准时将
  • Cycle2 初始化事件未触发

    我使用 Cycle2 作为基本的轮播 我的幻灯片项目有时在其数据中包含一个 url 因此我必须使用 Cycle2 api 事件来使用该 url 当它存在时 我的问题是 虽然 cycle after 事件触发正常 但初始化事件都不会触发 因此
  • 令牌返回后,Google 操作和帐户关联失败

    尝试使用 OAuth2 授权代码流在 Web 模拟器中测试身份验证 https developers google com actions tools web simulator https developers google com ac
  • 缓存 Flask-登录 user_loader

    我有这个 login manager user loader def load user id None return User query get id 在我引入 Flask Principal 之前它运行得很好 identity loa
  • (Unity 中的 Firebase 数据库)在 Android 构建期间在 Temp 中缺少classes.jar

    I am using Firebase Database in my Unity project but I am having some issues when building the project for android It ru

随机推荐

  • nginx 模块中是否有向多个服务器发送(广播)单个请求的功能

    nginx 模块中是否有向多个服务器广播单个请求的功能 我的要求是我需要一个 nginx 模块 它可以向多个服务器发送单个请求 一般来说广播该请求 在等待响应一段时间 例如 5 毫秒 后 它从不同的服务器获得响应要么组合在一起并发送给客户端
  • PHP PEAR 容器错误

    好吧 这是我第一次在这里提问 我的问题很尴尬 也很难弄清楚 故事是这样的 我有一个小系统 它发送大量电子邮件邀请 不是垃圾邮件 所以 明智的做法是 我不使用 PHP 函数 mail 我使用 PEAR 类 如 Mail Mail Queue
  • 调整 Vaadin 图像大小

    我正在将文件中的图像插入到用户界面中 我通过以下方式在 Vaadin 7 6 8 中创建它these https vaadin com docs part framework application application resource
  • C 中的二进制补码加法溢出

    我在 C 中看到一个有缺陷的代码 用于检查加法是否会导致溢出 它可以很好地与char 但当参数是时给出错误的答案int我不明白为什么 这是代码short论据 short add ok short x short y short sum x
  • 多行 UILabel 上的自动收缩

    是否可以在多行上联合使用 autoshrink 属性UILabel 例如 2 行可用的大文本大小 我找到了这个链接http beckyhansmeyer com 2015 04 09 autoshrinking text in a mult
  • 以编程方式为 iPhone 创建 x509 证书,而不使用 OpenSSL

    有没有一种方法可以仅使用 Apple 安全框架以编程方式在 iPhone 应用程序中创建自签名证书 即不必搞乱 OpenSSL 吗 如果没有 openSSL 或 RSA 库 这似乎是不可能的 我搜索了一些答案 这似乎是最好的 甚至包括与此问
  • Visual Studio C++ 2010 中的自动创建实现[重复]

    这个问题在这里已经有答案了 我想知道是否有一种方法可以编写完整的头文件并让 Visual Studio 创建适当的实现文件来节省所有额外的工作 我觉得他们一定想到了 因为这是一个如此简单的事情 但我在任何地方都找不到它 CodeWiz ht
  • 在Visual Studio中查看xml文件时如何获取某个节点的xpath?

    当我在 Visual Studio 中打开 xml 文件并浏览它时 我想获取光标处某个节点的 xpath 例如右键单击并选择 从该节点获取 xpath 或类似的内容 我们如何在 Visual Studio 2010 中做到这一点 或者使用哪
  • bootstrap,带下拉菜单的工具提示,在按钮组中似乎有效果

    在引导程序中 带有下拉菜单的工具提示 当我将鼠标悬停在负责工具提示的按钮上时 附加到按钮组中一个按钮的悬停数据切换似乎会产生效果 然后它还会调整其看起来不太好的位置 请帮我 这是我的代码
  • 创建数据透视表时VBA运行时错误5

    我搜索了互联网代码 并能够组合一个宏来通过 VBA 创建数据透视表 当创建数据透视表缓存时 我不断收到运行时错误 5 无效的过程调用或参数 Set myPivotTable ThisWorkbook PivotCaches Create S
  • 如何将值推入 jsonb 列中的 key[] 中?

    我有这样的jsonbPostgres 表中的结构 res 123 223 我想将价值观推向res 大批 我不知道数组中有多少个值jsonb insert在位置上操作 所以我尝试了 1位置 select jsonb insert res 12
  • 如何使用 Spring ROO 访问第三方 API(例如:Facebook、Linkedin、Twitter)

    我正在尝试使用 Spring ROO 访问第三方 API 例如 Facebook Linkedin Twitter 可以使用 Spring ROO 来做吗 如果可能的话 请帮助我 我该怎么做 谢谢 穆尼 如果您专门针对社交网络集成 您可以轻
  • ASP.NET MVC - 根据 Active Directory 对用户进行身份验证,但需要输入用户名和密码

    我正在开发一个 MVC3 应用程序 该应用程序需要根据 AD 对用户进行身份验证 我知道 MVC3 中有一个选项可以创建一个 Intranet 应用程序 该应用程序自动根据 AD 对用户进行身份验证 但它使用 Windows 身份验证并自动
  • 如何在 VB6 中重新初始化 UDT?

    我有一个循环 它读取一堆 XML 文件 对于每个文件 它验证 XML 中的数据并将其加载到一些 UDT 中 然后对数据进行一些处理 然后它返回到循环的开头 并且 UDT 中仍然包含先前 XML 中的数据 如果在新标签中定义了该标签 则会覆盖
  • docker-compose 重启间隔

    我有一个docker compose yml文件包含以下内容 services kafka listener build command bundle exec kafka foreground restart always other s
  • 更新与更新地点

    我有一个包含很多行的表 我定期想将其中的一列设置为0使用 cron 什么更快 更少的内存消耗 做UPDATE在所有行上 即没有WHERE条款 或做一个UPDATE only WHERE mycolumn 0 正如在原始帖子的评论中注意到的那
  • 在调用者的返回序列中跳过函数

    在一系列函数调用中 例如 main gt A gt B gt C 当被调用函数完成时 它通常返回到调用函数 例如C 返回到B 这将返回到A etc 我想知道是否也可以直接返回到调用序列中较早的函数 所以C 还给main 并跳过B and A
  • C# 字节数组到固定 int 指针

    是否可以以某种方式转换由fixed 语句创建的指针的类型 情况是这样的 我有一个字节数组 我想对其进行迭代 但是我希望将这些值视为 int 从而使用 int 而不是 byte 这是一些示例代码 byte rawdata new byte 1
  • Three.js:如何缩放和偏移图像纹理?

    如何缩放和偏移图像纹理 我的图像尺寸是 1024 像素 x 1024 像素 var textureMap THREE ImageUtils loadTexture texture png 看一下纹理文档 https threejs org
  • 禁用 UICollectionView 中 UIAttachmnetBehavior 的垂直移动

    我尝试在水平 UICollectionView 中模仿消息应用程序弹簧动画 我在 UICollectionViewFlowLayout 子类中使用了 UIAttachmentBehavior 但问题是 当我水平滚动时 单元格也会垂直和水平移