1

我正在尝试创建一个与 iOS 相同但只有四年的日历视图。

The hierarchy is like: UICollectionView: One Section for each year UICollectionViewCell: 12 cells/items for 12 months in an year UICollectionView: UICollectionViewCell: Upto 31 cells for month day string, which have UILabel as their content.

附上截图。

在此处输入图像描述

为了克服延迟滚动,我删除了 Month 单元格的数据源。容器视图控制器本身就是两个集合视图的数据源。

12 个月集合视图已被子类化以存储年份值的索引路径。从本教程中获得了这个技巧:https ://ashfurrow.com/blog/putting-a-uicollectionview-in-a-uitableviewcell/

但是问题仍然存在,因为我在显示之前在月份单元格上调用 reloadData。

为了解决这个问题,我确实覆盖了 UICollectionViewCell 的 prepareForReuse() 方法,并在 monthCollectionViewCell 中将 indexPath、delegate 和 datasource 属性设置为 nil。此外,删除了 reloadData 调用。但是滚动仍然滞后。

教程链接与我的工作流程几乎相同。

这是我的代码的链接:https ://github.com/nipun0505/TestCalendarView

4

1 回答 1

2

您可以通过以下方式减少延迟:

1)缓存你的颜色。

尝试注释掉这行代码,看看延迟有多好:

//        if ([[_dateCompareFormatter stringFromDate:date] isEqualToString:[_dateCompareFormatter stringFromDate:[NSDate date]]])
//        {
//            dayCell.dayLabel.backgroundColor = [UIColor cyanColor];
//        }

//        else
//        {
//            dayCell.dayLabel.backgroundColor = [UIColor clearColor];
//        }

缓存颜色后,请记住,清晰的颜色会比不透明的颜色滞后。

2)你为什么要在这个函数中一遍又一遍地创建一个日期格式化程序?

(UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
NSDateFormatter *df = [[NSDateFormatter alloc] init];

请缓存这样的东西。缓存是你的朋友。

3) 性能也可以在其他方面有所提高。您的日历加载时间很糟糕:s。

如果你加快速度,并做上述两件事,你会看到速度明显提高。

[编辑到#3] -->我的意思是我说你的日历的加载时间几乎是 4 秒。这是因为您在屏幕上显示了许多项目。也许你可以稍微改变你的设计?这是一个疯狂的想法。对于每个月,您的日历当前必须跟踪大约 30 项。每个 iPhone 6s 屏幕大约 15 个月,每月大约 30 件商品。不是跟踪 30 个项目,而是跟踪排列在 MonthCell 行中的 6 个标签?您将不得不使用一些计算来使文本对齐,但如果您能够使其工作,您的性能提升将是不可思议的。

我看到你有一个蓝色的后视图。所以可以有两种类型的细胞。一个有 6 个标签,另一个有 30 个项目。您可以根据需要显示哪个单元格。您可以做很多事情来提高性能。

于 2016-08-08T21:52:38.183 回答