在我正在处理的程序中,我正在执行大量数据处理,并希望能够绘制自定义 NSView 以直观地表示该过程。
使用 GCD 在主线程外处理数据处理(使用 dispatch_sync 作为需要保留的顺序):
for (int i=0; i<iterations; i++) {
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Add a data crunching task to the queue!
});
}
当开始处理时,我初始化了一个计时器,用于要求自定义显示定期重绘(一旦所有处理任务完成,此计时器将失效):
-(void)onTick:(NSTimer *)timer {
[_customView setNeedsDisplay:YES];
// Update some other UI object (labels etc.)
}
我可以按预期工作,但是我现在注意到的唯一问题是,如果我在同一个窗口上单击并按住按钮,或者在进程进行时开始拖动滑块,自定义视图的重绘在我放开鼠标之前被阻止!
有什么办法可以防止这种情况发生,最好不要将所有控件移动到单独的窗口上!