Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在哪里调用setNeedsDisplay以更新CALayer?_Ios_Objective C_Uiview_Calayer - Fatal编程技术网

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*)键