gpt4 book ai didi

cocoa - 调整 ScrollView 上的动画大小

转载 作者:行者123 更新时间:2023-12-03 17:59:44 25 4
gpt4 key购买 nike

我正在尝试在我构建的这个简单的自定义 TUIScrollView 类(来自 TwUI 开源项目,与 UIScrollView 非常相似)上创建调整大小切换动画。它称为 TUILayout,支持水平布局以及垂直、动画插入和删除,并且有一种更具声明性的方式向其单元格提供数据,与委托(delegate)相比,我更喜欢这种方式。它回收类似于 TUITableView 或 UITableView 的 View 。不管怎样,如果你想继续学习,这只是一个类,就在这里。

https://github.com/mrjjwright/TUILayout .

在示例代码中,用户单击左下角的蓝色按钮,所有行都会平滑缩小到用户可以重新排序和删除某些行的大小(右键单击示例中的一行以查看实际效果) )等...然后用户再次单击蓝色按钮将行切换回原始大小。

setObjectHeight:animated 中执行此调整大小时,我首先调整表示行的模型对象的大小,重新计算并设置 TUIScrollView 上的 contentSize,在所有新 View 中循环(假设再添加 10 个 View 将适合缩小的 View ,因此 dequeueReusableView 和 addSubview 被调用 10 次),最后我将所有 View 的框架设置为它们在 layoutSubviews 中的大小和位置。

结果是 ScrollView 正确地缩小到滚动条不再显示的大小,屏幕上的 View 动画平滑地缩小到缩小的尺寸,但新添加的 subview 现在可以在很大程度上适应visibleRect动画稍后作为一组 subview 。

因此,所有新添加的 subview 都落后于屏幕上的 View ,我无法弄清楚为什么动画没有全部一起发生。我尝试了很多不同的组合,但没有成功,包括 CATransactions。我想知道这是否与 CAScrollLayer 的工作原理有关,或者是否有人可以帮助我思考这个问题。

更普遍的问题是如何平滑地处理 ScrollView 上的调整大小动画,以回收其 View ,我已经研究了 iOS 世界中的其他几个网格,并获得了一些灵感,但正在寻找更多。

谢谢!

最佳答案

我想我可能已经在这里解决了我自己的问题(当我今天早上整理床铺时,它击中了我)。我强制当前的运行循环在所有必要的 subview 中循环后运行,非常重要的是,直到运行循环完成并添加动画所需的 subview 之后才设置 ScrollView 的 contentSize。为了让运行循环启动,我使用了 this SO question 中的技巧。 :

 skipLayout = YES;
[[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode beforeDate: [NSDate date]];
skipLayout = NO;

如果设置了 skipLayoutTUILayout 只会从layoutSubviews返回,这样刚刚添加的 View 不会立即被回收布局代码删除。强制运行循环运行可确保所有 subview 都在动画屏幕上。之后我执行了调整大小动 Canvas 局。如果有人感兴趣的话,我在 github 上更新了代码。我将暂时保留这个问题以获得更多见解。

关于cocoa - 调整 ScrollView 上的动画大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8376980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com