Hen*_*oke 3 core-animation objective-c calayer quartz-graphics ios
我使用自定义扩展程序绘制可滚动图形,CALayer其中包含一系列CGContextAddCurveToPoint调用[ MyCustomCALayer drawInContext].
我实际上并没有绘制图形的整个长度,而是每次UIPanGestureRecognizer更新时都会重新绘制图层的内容以反映新的水平偏移.这样,我只绘制图形的可见部分,图层的边界仅扩展到屏幕的大小.
[ MyCustomCALayer setNeedsDisplay ]在图形数据更改或平移偏移更改时[ MyCustomCALayer drawInContext]调用,然后调用它.
但是,每当我在平移过程中重绘图层时,我都会遇到这种奇怪的重影.一些搜索建议它可能是通过重绘图层的内容调用的隐式动画,但我找不到明确的答案.
以下是图表在休息时的样子:

这是在平移期间,重影重绘:

当然,当我做画全图表和调整图层的position属性进行平移它没有重影,但在内存中一个很长的位图看起来是一件坏事.
以前有人见过这种重影吗?如果它(我怀疑)是隐式动画,我该如何禁用所述动画?
它可能是一个隐式动画.重绘(内容更改)与Core Animation中的其他内容一样动画.
有很多方法可以防止这种情况,如果你是继承CALayer进行绘图,最好是覆盖 - [CALayer actionForKey:],返回nil以改变内容:
- (id<CAAction>)actionForKey:(NSString *)key
{
if ([key isEqualToString: @"contents"])
{
return nil;
}
return [super actionForKey: key];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1049 次 |
| 最近记录: |