Ios 在哪里调用setNeedsDisplay以更新CALayer?
我有一个视图控制器(Ios 在哪里调用setNeedsDisplay以更新CALayer?,ios,objective-c,uiview,calayer,Ios,Objective C,Uiview,Calayer,我有一个视图控制器(MagmaViewController),它正在管理一个名为MagmaView的视图。对于MagmaView的直接支持层,我通过将以下内容放入MagmaView的实现部分,指定了自己的定制CALayer子类magmavayer: + (Class)layerClass { return [MagmaLayer class]; } 我有一些定制的绘图,我想为MagmaLayer绘制MagmaView,因此我将一些绘图代码放入-(void)drawInContext:(
MagmaViewController
),它正在管理一个名为MagmaView
的视图。对于MagmaView
的直接支持层,我通过将以下内容放入MagmaView
的实现部分,指定了自己的定制CALayer子类magmavayer
:
+ (Class)layerClass
{
return [MagmaLayer class];
}
我有一些定制的绘图,我想为MagmaLayer
绘制MagmaView
,因此我将一些绘图代码放入-(void)drawInContext:(CGContextRef)context
方法MagmaLayer
。问题是,当我这样做并运行模拟器时,MagmaView显示为空白。我在MagmaLayer
的-(void)drawInContext:(CGContextRef)context
方法中设置了一个断点,似乎根本没有调用此方法
显然,我对触发此CALayer绘图的
setNeedsDisplay
命令的需要和位置感到困惑。首先,我认为,至少对于CALayer的第一次初始外观,如果CALayer是UIView的直接支持层,则不需要发出setNeedsDisplay
命令,并且,任何UIView都确保在需要时正确绘制其直接背衬层,并且只有非直接CALayer背衬层需要特别注意,以确保它们自己绘制。不是吗?另外,我应该将setNeedsDisplay
命令放置在何处,以使该直接背衬层MagmaLayer
绘制自身?setNeedsDisplay
命令是否应在MagmaView
的初始化方法中,该视图承载MagmaLayer
?或者我应该更进一步,将setNeedsDisplay
命令放在MagmaViewController
中,管理MagmaView
的视图控制器,比如说,控制器的视图将出现
方法?您需要告诉您的自定义图层何时绘制。基本实现不会自动调用-(void)drawInContext:(CGContextRef)context
。基本设置是在layers init方法中设置needsdisplaynboundschange=YES
。
如果您有触发重画的自定义属性,则必须实现/扩展+(BOOL)needsDisplayForKey:(NSString*)键