他,我刚刚意识到 [self setNeedsDisplayInRect:(dRect)] 绘制所有内容(不仅是必要的),然后在“dRect”中更新屏幕。所以我开始像这样编辑drawRect方法:
- (void)drawRect:(NSRect)dirtyRect{
if (gUs==1){
imagePos = NSMakePoint(0, 0);
[_bz_BG dissolveToPoint:imagePos fraction:1.0];
[self drawBPM];
[self writeSeq1steps];
[self writeSeq2steps];
[self drawSeq1Patterns];
[self drawSeq2Patterns];
[self drawSeq1];
[self drawSeq2];
[self drawSampleNameSeq1];
[self drawSampleNameSeq2];
[self drawBattCharge];
[self drawCPUload];}
if (gUs==2){
[self drawCPUload];}
if (gUs==3){
[self drawBattCharge];}
if (gUs==4){
[self drawBPM];}
}
然后让需要显示的方法改变“gUs”。这很好用,因为我有很多控件,所以极大地减少了 cpu 工作。
但后来我看到,在重负载或经常显示更新的情况下,有时另一种方法会在处理上一次调用的 needDisplay 之前更改“gUs”,从而导致错误的绘图。
我怎样才能避免这种情况?