我有一个程序在QCViews中播放石英成分。 由于QCViews位于辅助屏幕上,我需要在主屏幕(控制屏幕的类型)中显示(较小的)副本。
所以我每0.1秒触发一次计时器,拍摄QCView的快照,并在NSImageView中设置生成的图像。
我的问题:
快照在90%的时间内都是正确的,但有时会变成空白。一旦发生这种情况,从此QCView获取的所有快照都是空白的,直到有一个stopRendering / startRendering。即使在同一个具有完全相同组成的QCView正在运行并提供良好快照的同时,也会发生这种情况。
快照似乎与QCView不同步。我试图以更高的频率发射计时器,但它没有改变任何东西(我提到这个,以防它可能与我的空白图像的主要问题有关)。
任何想法或指示?
编辑:
我尝试重现:创建了一个最小的项目,然后复制粘贴我的代码:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSRect r = NSMakeRect(0, 0, nb * 101, 101 );
feedbackwindow = [[[NSWindow alloc] initWithContentRect: r
styleMask: NSResizableWindowMask
backing: NSBackingStoreBuffered
defer: NO ] retain ];
for ( int n = 0; n < nb; n++ )
{
v[n] = [[[QCView alloc] init] autorelease];
[v[n] setFrame: NSMakeRect( 101 * n, 0, 100, 100 ) ];
[[window contentView] addSubview: v[n]];
if(![v[n] loadCompositionFromFile:[[NSBundle mainBundle] pathForResource:@"clock" ofType:@"qtz"]]) {
NSLog(@"Could not load composition");
}
[v[n] startRendering];
img[n] = [[[NSImageView alloc] init] autorelease];
[img[n] setFrame: NSMakeRect(101 * n, 0, 100, 100 ) ];
[[feedbackwindow contentView] addSubview: img[n]];
}
[feedbackwindow orderFront:nil];
[window orderFront:nil];
[self setFeedbackTimer: [NSTimer scheduledTimerWithTimeInterval: ( 0.01 )
target: self
selector: @selector(updateImage)
userInfo: nil
repeats: YES ]];
}
- (void) updateImage
{
for ( int n = 0; n < nb; n++ )
{
NSImage* snapshot = [v[n] snapshotImage];
[img[n] setImage: snapshot];
}
}
唉,我没有遇到问题......
QCViews的快照已经过时但非常好:(
快照似乎检索前一个图像而不是当前图像:我用“系统时间”制作了一个简单的Quartz Composer时钟 - &gt; “time formatter(format = ss)” - &gt; “带字符串的图像” - &gt; “sprite”和快照正好迟了一秒:它们与原始时钟同时改变,但显示上一张图像......
听起来像是一个错误,但可能与导致无效图像的错误相同......