3

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

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

我在 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];
}

有什么办法可以禁用这种“优化”?

4

0 回答 0