gpt4 book ai didi

objective-c - [CALayer drawInContext] 重影

转载 作者:可可西里 更新时间:2023-11-01 06:22:24 25 4
gpt4 key购买 nike

我使用 CALayer 的自定义扩展绘制为可滚动图形,并在 [MyCustomCALayer drawInContext] 中调用了一堆 CGContextAddCurveToPoint

我实际上并没有绘制图形的整个长度,而是在每次 UIPanGestureRecognizer 更新以反射(reflect)新的水平偏移时重新绘制图层的内容。这样,我只绘制图形的可见部分,层的边界只延伸到屏幕的大小。

[ MyCustomCALayer setNeedsDisplay ] 在图形数据更改或平移偏移更改时被调用,然后导致 [ MyCustomCALayer drawInContext] 被调用。

但是,每当我在平移过程中重新绘制图层时,都会出现这种奇怪的重影。稍微搜索一下表明它可能是 implicit animation通过重绘层的内容调用,但我找不到明确的答案。

这是图表在静止时的样子: At rest

这是在平移过程中重绘重绘: During panning

当然,当我确实绘制整个图形并调整图层的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com