【发布时间】:2013-02-28 23:57:29
【问题描述】:
在我的 iOS 应用程序中,我有一个 uiview,需要对其进行动画处理、手势转换、着色(使用 quartzcore 阴影)和编辑。当我在这个UIView 上执行动画和手势时,它非常“滞后”。 iPhone 上的动画不是很“滞后”,但是在使用 iPad 时,动画几乎没有响应(到了我的应用程序崩溃的地步)。我已经使用 Instruments 测试了我的应用程序,并且在动画开始之前,该应用程序不会占用太多内存/CPU/电源。我已经在设备和 Intel i7 8GB iMac 上进行了测试,两者的动画都“滞后”。
我正在执行的动画并不复杂,它只是跨 X 轴的平移。在查看了与动画相关的每一行代码后,我发现这些行是问题:
viewer.layer.masksToBounds = NO;
viewer.layer.shadowOffset = CGSizeMake(-1, 1);
viewer.layer.shadowRadius = 3;
viewer.layer.shadowOpacity = 0.3;
上面的代码为视图添加了一个阴影,每当我对其进行动画处理时就会滞后 (viewer)。如果我使用上面的代码,但我添加以下线条动画效果很好:
viewer.layer.shouldRasterize = YES;
此代码的问题在于,它严重降低了 UIView 内显示的内容的质量 (viewer)。这是shouldRasterize 设置为 YES 的图像:
然后是没有shouldRasterize的UIView:
这些屏幕截图都来自同一个 Retina iPad。
终极问题:如何在带有阴影的UIView 上流畅地执行动画(最好使用QuartzCore)?有没有办法在不降低质量的情况下对内容进行光栅化?
【问题讨论】:
标签: uiview quartzcore objective-c cocoa-touch animation uiview quartz-core