1

我有一个程序在 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 时钟,带有“系统时间”->“时间格式化程序(格式 = ss)”->“带字符串的图像”->“精灵”并且快照恰好晚了一秒:它们与原始时钟同时更改,但显示前一个图像...

听起来也像一个错误,但可能与导致无效图像的错误不同......

4

0 回答 0