我面前有两个石英iPhone应用程序。在每个视图中,对setNeedsDisplay的调用都会导致视图重新绘制自身。但有一个重要的区别。在一个例子中(Mark/Lamarche的书《开始iPhone开发》中的“Quartz Fun”应用程序),每次视图都是空白的。在另一种情况下(我正在开发的应用程序),视图从以前的视图开始,并在其上添加新的图形。
我不明白为什么会这样。有人能给我提供线索吗?
编辑2:我还是不明白这里发生了什么。但我发现我可以打电话来澄清我的观点
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClearRect(context, self.frame);
编辑#3:显示缩短的代码:
正如一位评论员所建议的,我已经编辑了我的应用程序,所以这个问题只需要很少的代码就可以解决[问题的形式现在有所不同,如下所述。]
应用程序代表:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
DiceView *dv = [[DiceView alloc]initWithFrame: window.frame];
[window addSubview:dv];
[dv release];
[window makeKeyAndVisible];
return YES;
}
骰子视图:
- (void)drawRect:(CGRect)rect {
static int nDrawrectCalls = 0;
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 1.0);
CGContextSetStrokeColorWithColor(context, (nDrawrectCalls%5==0?[UIColor redColor]:[UIColor greenColor]).CGColor);
CGContextMoveToPoint(context, 10, 30+10*nDrawrectCalls);
CGContextAddLineToPoint(context, 300, 30+10*nDrawrectCalls);
CGContextStrokePath(context);
nDrawrectCalls++;
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[self setNeedsDisplay];
}
现在看看区别。现在,它似乎开始用两次触摸前屏幕上的任何东西来绘图。换句话说,在触摸2之后,我看到初始行,加上触摸2的行——但不是触摸1的行。触摸3之后,我看到触摸1和触摸3的行。触摸4之后,我看到初始行以及触摸2和触摸4的行。依此类推。