9

我有一个带有 CATiledLayer 支持的视图。我想从这个 CATiledLayer UIView 中获取可见图块并将其添加到另一个视图作为它的 CALayer 支持,从而在另一个不使用 CATiledLayer 的 UIView 中重新创建可见图像。

我想这样做的原因是我将使用第二个 UIView 来掩盖更新 CATiledLayer 支持的 UIView 的效果 - 这当前会在重新加载所有图块时产生闪烁。

问题是,我不完全确定我会如何做到这一点。有任何想法吗?

4

2 回答 2

3

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-21T01:59:25.000 回答
0

你真正的问题是闪烁。我在带有自定义 CALayer 支持的视图上遇到了类似的问题,这是解决方案的一部分:创建 CALayer 的自定义子类并实现以下方法:

- (void) display {
    self.contents = nil;
    [super display];
}

这为我解决了一系列问题,但可能无法为您解决。您的替代方法可能是在更新时禁用事务:来自CATransaction 类参考

setDisableActions:设置是否禁止由于在此事务组中进行的属性更改而触发的操作。

所以要使用这个:

[CATransaction begin];
[CATransaction setDisableActions:YES];
// do updating/flickering stuff
[self doFlickeringThing];
[CATransaction commit];
于 2012-06-23T00:20:55.987 回答