我在代码中使用CALayers动画。
下面是我的代码
CALayer *backingLayer = [CALayer layer];
backingLayer.contentsGravity = kCAGravityResizeAspect;
// set opaque to improve rendering speed
backingLayer.opaque = YES;
backingLayer.backgroundColor = [UIColor whiteColor].CGColor;
backingLayer.frame = CGRectMake(0, 0, templateWidth, templateHeight);
[backingLayer addSublayer:view.layer];
CGFloat scale = [[UIScreen mainScreen] scale];
CGSize size = CGSizeMake(backingLayer.frame.size.width*scale, backingLayer.frame.size.height*scale);
UIGraphicsBeginImageContextWithOptions(size, NO, scale);
CGContextRef context = UIGraphicsGetCurrentContext();
[backingLayer renderInContext:context];
templateImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
这个backingLayer像这样添加了许多子层,这个视图是我的subView。
但是现在我如何在各自的UIViews中获取视图事件,因为我已经将它们添加为子层,所以我试图实现类似于Flipboard应用程序的功能,在该应用程序中,即使它们是子层,它们也具有页面导航和单击事件。
最佳答案
CALayers的要点是它们重量轻,特别是没有事件处理开销。那就是UIView的目的。您可以选择将代码转换为使用UIViews进行事件跟踪,或者编写自己的事件传递代码。对于第二个,基本上,您将让包含UIView的对象对每个子层的边界执行一堆“正点校正”查询,并将事件传递给Z位置最高的CALayer(其中的自定义方法) 。