首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CATiledLayer到CALayer

CATiledLayer到CALayer
EN

Stack Overflow用户
提问于 2012-06-18 23:49:43
回答 2查看 1.6K关注 0票数 9

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

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

问题是,我不完全确定我会怎么做。有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-21 09:59:25

CATiledLayer是CALayer的一个子类,提供了一种异步提供层内容的平铺的方法,这些平铺可能缓存在多个细节级别。

您可以使用以下命令将层中的可见内容渲染为CGContextRef:

代码语言:javascript
复制
- (void)renderInContext:(CGContextRef)ctx

然后使用它来更新其他层,方法是设置它的委托并实现

代码语言:javascript
复制
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context 

此处显示的ss http://www.raywenderlich.com/2502/introduction-to-calayers-tutorial

但老实说,我不认为这是有效的。

票数 3
EN

Stack Overflow用户

发布于 2012-06-23 08:20:56

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

代码语言:javascript
复制
- (void) display {
    self.contents = nil;
    [super display];
}

这为我解决了一系列问题,但可能不会为您解决它。另一种方法可能是在更新时禁用事务:从CATransaction Class Reference

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

所以要使用这个:

代码语言:javascript
复制
[CATransaction begin];
[CATransaction setDisableActions:YES];
// do updating/flickering stuff
[self doFlickeringThing];
[CATransaction commit];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11086414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档