当NSWindow被拖延时刷新NSImageView

时间:2013-08-29 17:54:37

标签: objective-c cocoa nstimer nswindow nsimageview

我有一个NSTimer,每隔几毫秒加载一次,然后将新图像分配到NSImageView中。 NSTimer已经使用各种运行循环(NSRunLoopCommonModes,NSModalPanelRunLoopMode,NSEventTrackingRunLoopMode)进行设置,以便在事件发生时继续执行它正在执行的操作。

这很好用但是当在屏幕上拖动实际窗口时这会停止工作。我已经确认定时器实际上是在拖动期间触发,并且图像也被分配给NSImageView。唯一的问题是当拖动窗口时屏幕内容由于某种原因不刷新。这可能是一个内置的优化,但我想禁用它,以便即使在拖动窗口时,imageview也会继续刷新和重新绘制。

我在NSTimer触发块中尝试了以下内容,但这仍然没有强制刷新和重绘NSImageView的内容:

- (void)animateTimerFired:(NSTimer *)aTimer {
    // .... load imageObj

    // set image
    [imgBackgroundView setImage: imageObj];

    // try and refresh the window forcibly 
    [[imgBackgroundView window] viewsNeedDisplay];
    [[imgBackgroundView window] display];
    [[imgBackgroundView window] update];
    [[imgBackgroundView window] flushWindow];
}

有没有办法禁用这种“优化”?

0 个答案:

没有答案