伙计们,我在继承UIView时遇到了一些麻烦。
我正在创建一个IconView。
只是它是其他一些子视图的容器。
在我的IconView中,我有这个iVar:
UIImageView _background
UIImageView _icon
UILabel _iconLabel。
当我初始化IconView时,我使用图像,文本和一些石英效果(如roundCorner和Shadow)设置了这3个iVar,然后将它们添加到自视图中。
一切都很好,但是如果我在空的滚动视图中插入一些IconView(即10),滚动效果将不流畅。在将一千个简单的UIViews插入scrollview之前,我曾尝试过,scroll动画效果完美。
仅使用我的IconView的10个,滚动动画效果非常差。
我可以采用不同的方法来保留UIImages而不是UIImageViews并将其绘制在drawRect:方法中,但在这种情况下,我将失去Autoresizing属性和Quartz效果。
有什么建议吗?
谢谢Gabriele。
最佳答案
不幸的是,UIScrollView
变慢得很快。那里有很多关于此主题的文章和文章,例如this Question和this (defect) blogpost以及it's sample code。我强烈建议观看2010年的WWDC视频中的“关于iOS中的性能优化”的三个 session 。总结结论:尽可能少使用子视图,并特别注意避免透明胶片。
好的,对于一般的“ScrollViews中的性能”演讲,到现在为止,您的情况就这么多:遇到相同的问题,我使用了上面文章和视频中的所有技巧,尽管它们改善了性能,但这还不够。我和您一样,使用圆角绘制了一些图像,发现这绝对会降低性能。仅仅停用它们就比其他所有事情有用。阴影效果可能是相同的。
现在,很可能您想保留那些圆角。我建议您创建图像的副本(或尽可能获取原始图像),然后使用those awesome classes直接操作它们。这样,效果将仅应用一次。它非常适合我。对于阴影,您可能只需要在Photoshop中创建阴影并将其用于新的ImageView中即可。
如果这还不够,那么您应该尝试缓存IconViews
,就像尚未缓存TableViewCells
一样。