0

真的很奇怪,对于一个单视图应用程序,我添加了一个MainView类并ViewController.xib使用自定义类MainView,并在 中捕获touchesMoved事件ViewController.m,并记录点(位置)。

然后在drawRect里面MainView.m,我画了点。所以当程序运行时,我看到的只是屏幕上的一个点,绘制到我手指移动到的位置......

但是,一旦我添加initWithCoderMainView.m,行为就完全不同了。似乎视图在绘制点之前不会清除其内容,并且之前绘制的所有点都保留在屏幕上,但屏幕闪烁很多(我正在使用带有新 GPU 的新 iPad)......似乎在那里是几个“缓冲区”,一些具有不同的旧点集,另一个缓冲区具有不同的旧点集......当我的手指离开屏幕时,它可能是其中一个缓冲区(具有不同点集的随机缓冲区) . (还有一件事:屏幕的背景变成了全黑。之前,它是灰色或任何颜色的 Interface Builder 将视图设置为)。为什么添加initWithCoder如下会产生这样的效果?

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super init];
    if (self) {

    }
    return self;
}
4

1 回答 1

2

你的initWithCoder:方法不对。您必须调用[super initWithCoder:aDecoder],而不是普通的 old [super init],否则来自 xib 文件的所有信息(包括重绘选项和背景颜色)都会丢失 - 该aDecoder对象包含所有这些信息,而您正在丢弃它。

于 2012-04-22T06:14:27.037 回答