在我的 iOS 应用程序中,我有一个uiview需要进行动画处理、用手势转换、着色(使用石英核阴影)和编辑。当我对此执行动画和手势时,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 的图像:
然后 UIView 没有shouldRasterize
:
这些屏幕截图都来自同一个 Retina iPad。
终极问题:我怎样才能在UIView
有阴影的情况下流畅地执行动画(最好使用QuartzCore
)?有没有办法在不降低质量的情况下对内容进行光栅化?