gpt4 book ai didi

ios - 有没有更有效的方法来检测 UIScrollView 偏移量?

转载 作者:行者123 更新时间:2023-11-29 02:04:36 24 4
gpt4 key购买 nike

我在 UIScrollView 中制作了一个无限滚动的日历,其中每个最多可以包含八个 subview 。我在 scrollViewDidScroll() 中调用的函数如下所示(已简化):

func addAndRemoveRow(scrollView: UIScrollView) {
if scrollView.contentOffset.y - scrollViewZeroOffsetY < -heightOfDay/2 { // Going back in time.
createRowAtBottom()
removeRowAtTop()
} else if scrollView.contentOffset.y - scrollViewZeroOffsetY > heightOfDay/2 { // Going forward in time.
createRowAtTop()
removeRowAtBottom()
}
}

在功能上,这非常有效,并且在每行包含一天的模式下,即使在我的 iPhone 5 上它也能流畅运行(两种模式在模拟器上运行流畅)。然而,在每行包含一周的模式下,它非常不稳定。

每次 ScrollView 移动一个像素时调用 addAndRemoveRow() 似乎有点矫枉过正。有没有办法减少调用它的频率?

(或者,是否有更优化的方法来执行此操作?我尝试使用 UICollectionView,但它运行起来并不流畅。)

mockup

最佳答案

我很好奇为什么 UICollectionView 没有帮助。我已经在屏幕上同时显示了具有 100 个单元格的 collectionView,即使在 5 个单元格上它也运行得非常流畅。

如果您仍然有 CollectionView 的实现,我会检查一些事情以查看它是否可以帮助您的性能:

1:确保您正在重用单元格,并且您的数据源不会动态更改,除非它也需要。另外,请确保如果您要向单元格添加更多 subview ,则应在 awakeFromNib 中完成,而不是在配置它时完成,并在可能的情况下重用您的更改。

2:如果启动时出现延迟,请使用估计大小,假设您使用 iOS8+ 和流布局 @property (nonatomic) CGSizeestimatedItemSize NS_AVAILABLE_IOS(8_0);

3:如果您没有使用流布局,请确保您只为 返回正确数量的布局属性 - (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect; 您应该只返回矩形中任何内容的属性。

4:尝试不要在边界更改时使布局无效,看看它是否有助于性能。

如果您正在使用 View 做更多动态的事情,那么这是一本很好的读物:http://www.raizlabs.com/2013/10/animating-items-uicollectionview-2/

关于ios - 有没有更有效的方法来检测 UIScrollView 偏移量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29921353/

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