我使用 CALayer
的自定义扩展绘制为可滚动图形,并在 [MyCustomCALayer drawInContext]
中调用了一堆 CGContextAddCurveToPoint
。
我实际上并没有绘制图形的整个长度,而是在每次 UIPanGestureRecognizer
更新以反射(reflect)新的水平偏移时重新绘制图层的内容。这样,我只绘制图形的可见部分,层的边界只延伸到屏幕的大小。
[ MyCustomCALayer setNeedsDisplay ]
在图形数据更改或平移偏移更改时被调用,然后导致 [ MyCustomCALayer drawInContext]
被调用。
但是,每当我在平移过程中重新绘制图层时,都会出现这种奇怪的重影。稍微搜索一下表明它可能是 implicit animation通过重绘层的内容调用,但我找不到明确的答案。
这是图表在静止时的样子:
这是在平移过程中重绘重绘:
当然,当我确实绘制整个图形并调整图层的 position
属性以进行平移时,它不是重影,但内存中有一个又大又长的位图似乎很糟糕东西。
有人见过这种重影吗?如果它是(正如我怀疑的那样)隐式动画,我该如何禁用所述动画?
最佳答案
它可能是一个隐式动画。重绘(内容更改)像 Core Animation 中的其他所有内容一样进行动画处理。
有很多方法可以防止这种情况,如果您子类化 CALayer 来进行绘图,最好的方法是覆盖 -[CALayer actionForKey:],在内容更改时返回 nil:
- (id<CAAction>)actionForKey:(NSString *)key
{
if ([key isEqualToString: @"contents"])
{
return nil;
}
return [super actionForKey: key];
}
关于objective-c - [CALayer drawInContext] 重影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10728593/