我有一个有CATiledLayer支持的视图。我想从这个CATiledLayer UIView中获取可见的磁贴,并将其添加到另一个视图中作为其CALayer支持,从而在另一个不使用CATiledLayer的UIView中重新创建可见图像。
我想这么做的原因是我将使用这第二个UIView来掩盖更新CATiledLayer支持的UIView的效果-这当前会在所有磁贴被重新加载时产生闪烁。
问题是,我不完全确定我会怎么做。有什么想法吗?
发布于 2012-06-21 09:59:25
CATiledLayer是CALayer的一个子类,提供了一种异步提供层内容的平铺的方法,这些平铺可能缓存在多个细节级别。
您可以使用以下命令将层中的可见内容渲染为CGContextRef:
- (void)renderInContext:(CGContextRef)ctx然后使用它来更新其他层,方法是设置它的委托并实现
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context 此处显示的ss http://www.raywenderlich.com/2502/introduction-to-calayers-tutorial
但老实说,我不认为这是有效的。
发布于 2012-06-23 08:20:56
在这里,您真正的问题是闪烁。我在一个有自定义CALayer支持的视图上遇到了类似的问题,这是解决方案的一部分:创建CALayer的自定义子类并实现以下方法:
- (void) display {
self.contents = nil;
[super display];
}这为我解决了一系列问题,但可能不会为您解决它。另一种方法可能是在更新时禁用事务:从CATransaction Class Reference
setDisableActions:设置是否禁止因此事务组中的属性更改而触发的操作。
所以要使用这个:
[CATransaction begin];
[CATransaction setDisableActions:YES];
// do updating/flickering stuff
[self doFlickeringThing];
[CATransaction commit];https://stackoverflow.com/questions/11086414
复制相似问题