У меня есть программа воспроизведения кварцевых композиций в QCViews.
Поскольку QCViews находятся на дополнительном экране, мне нужно отобразить (меньшую) копию на главном экране (вид экрана управления).
Поэтому я запускаю таймер каждые 0,1 секунды, делаю снимок QCView и устанавливаю полученное изображение в NSImageView.
Мои проблемы:
Снимок верен примерно в 90% случаев, но иногда пропадает. Как только это происходит, все снимки, сделанные из этого QCView, остаются пустыми, пока не будет stopRendering / startRendering. Это происходит даже тогда, когда в то же время работает другой QCView с точно такой же композицией, который дает хорошие снимки.
Снимки, похоже, не синхронизированы с QCView. Я пытался запустить таймер с более высокой частотой, но он ничего не изменил (я упоминаю об этом на случай, если это может быть связано с моей основной проблемой пустых изображений).
Есть идеи или указатели?
EDIT:
Я попытался воспроизвести: создал минимальный проект, затем скопировал и вставил мой код:
- (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 с "системным временем" -> "форматером времени (format = ss)" -> "изображение со строкой" -> «спрайт» и снимок опаздывают ровно на одну секунду: они изменяются одновременно с исходными часами, но отображают предыдущее изображение ...
Звучит как ошибка, но, вероятно, не та, которая вызывает недействительные изображения ...