【发布时间】:2015-03-27 11:57:08
【问题描述】:
注意:我不寻求解决实际问题。我出于好奇而问。
我有一个自定义的UIView 子类,我在应用程序的主视图中使用它。它有一个金属层类:
+ (id)layerClass
{
return [CAMetalLayer class];
}
我注意到如果我重写-(void)drawRect:(CGRect)rect 方法,就会开始出现错误消息:
<CAMetalLayer: 0x17005dc70>: calling -display has no effect.
更有趣的是,即使我这样覆盖它也会出现:
- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
}
据我了解,这根本不可能产生任何影响,因为根据 OOP 的基本原则,这样的覆盖(仅调用基类)不应该修改程序的行为。
此错误消息究竟意味着什么?为什么会出现?
【问题讨论】:
-
也许是因为你的 CAMetalLayer 没有像默认的 CALayer 那样将你的 UIView 设置为它的委托,它只是让你知道你在 drawRect 中浪费你的时间:因为它不会被调用...
-
@Jef 不,对于作为
UIView支持层的层更改委托是非法的。但是,覆盖drawRect实际上会有所不同。他们的系统实际上检查该方法是否被覆盖。 -
能否再添加一些与图层相关的代码?该警告的最初原因可能是不同的行。
标签: ios objective-c uiview metal