gpt4 book ai didi

ios - 在哪里调用 setNeedsDisplay 来更新 CALayer?

转载 作者:搜寻专家 更新时间:2023-10-30 20:15:46 24 4
gpt4 key购买 nike

我有一个 View Controller (MagmaViewController),它管理一个名为 MagmaView 的 View 。对于 MagmaView 的直接支持层,我通过将以下内容放入 MagmaView 的实现部分来分配我自己的自定义 CALayer 子类 MagmaLayer:

+ (Class)layerClass
{
return [MagmaLayer class];
}

我有一些自定义绘图,我希望 MagmaLayerMagmaView 绘制,所以我将一些绘图代码放入 -(void) drawInContext:(CGContextRef ) MagmaLayer 的上下文 方法。问题是,当我这样做并运行模拟器时,MagmaView 显示为空白。我在 MagmaLayer-(void) drawInContext:(CGContextRef) context 方法中设置了一个断点,看起来这个方法根本没有被调用。

显然,我对用于触发此 CALayer 绘制的 setNeedsDisplay 命令的需求和位置感到困惑。首先,我认为,至少对于 CALayer 的第一次初始出现,如果 CALayer 是 UIView 的直接支持层,则不需要发出 setNeedsDisplay 命令,并且任何 UIView 都确保它的直接支持层在需要时被正确绘制,只有非直接 CALayer 支持层需要特别注意以确保它们自己绘制。不是这样吗?另外,我应该在哪里放置 setNeedsDisplay 命令来使这个直接支持层 MagmaLayer 自行绘制? setNeedsDisplay 命令是否应该在 MagmaView 的初始化方法中,这里是托管 MagmaLayer 的 View ?或者我应该在链上走得更远,将 setNeedsDisplay 命令放在 MagmaViewController 中,管理 MagmaView 的 View Controller 在 Controller 的viewWillAppear 方法?

最佳答案

您需要告诉您的自定义图层何时绘制。基本实现不会自动调用 -(void) drawInContext:(CGContextRef) context。基本设置是在图层初始化方法中设置 needsDisplayOnBoundsChange = YES。如果您有应触发重绘的自定义属性,则必须实现/扩展 + (BOOL)needsDisplayForKey:(NSString *)key

关于ios - 在哪里调用 setNeedsDisplay 来更新 CALayer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30959691/

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