对于单 View 应用程序,我添加了一个 MainView
真的很奇怪上课并制作了ViewController.xib
使用 MainView
的自定义类, 并 catch touchesMoved
事件在 ViewController.m
, 并记录点(位置)。
然后在drawRect
里面MainView.m
,我画点。因此,当程序运行时,我所看到的只是屏幕上的一个点,绘制到我手指移动到的位置...
但是,一旦我添加 initWithCoder
至 MainView.m
,行为完全不同。似乎 View 在绘制点之前不会清除其内容,并且之前绘制的所有点都保留在屏幕上,但屏幕闪烁很多(我正在使用带有新 GPU 的新 iPad)......似乎有有几个“缓冲区”,一些有不同的旧点集,另一个缓冲区有不同的旧点集......当我的手指离开屏幕时,它可能是其中一个缓冲区(具有不同点集的随机缓冲区) . (还有一件事:屏幕背景变为全黑。之前,它是灰色或 Interface Builder 将 View 设置为任何颜色)。为什么添加 initWithCoder
如下会产生这样的效果?
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self) {
}
return self;
}
最佳答案
您的initWithCoder:
方法有误。您必须调用 [super initWithCoder:aDecoder]
,而不是普通的旧 [super init]
,否则 xib 文件中的所有信息(包括重绘选项和背景颜色)已丢失 - aDecoder
对象包含所有这些信息,而您正在丢弃它。
关于objective-c - 对于IOS应用,MainView.m中添加了initWithCoder后,View并不会在drawRect之前清空其内容,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10265401/