Как посмотреть прогресс конвертации фильма с помощью QTKit? - PullRequest
0 голосов
/ 03 октября 2010

Как просмотреть ход конвертации фильма со следующим кодом QTKit?

NSDictionary *dict = [NSDictionary 
     dictionaryWithObjectsAndKeys:
     [NSNumber numberWithBool:YES], QTMovieExport, 
     [NSNumber numberWithLong:kQTFileType3GPP], 
     QTMovieExportType, nil];

[[movieView movie] writeToFile:@"/tmp/sample.3gp" 
     withAttributes:dict];

т.е. Я хочу просмотреть ход конвертации фильма, чтобы отображать его в индикаторе выполнения.

1 Ответ

1 голос
/ 03 октября 2010

взято с этого сайта: http://www.mactech.com/articles/mactech/Vol.21/21.08/Threads/index.html

Если фильм очень большой, этот метод может занять много времени. В течение этого времени пользователь не сможет ничего сделать с приложением, кроме перемещения окон. Не очень интересно.

Немного лучшее решение включает использование фильма: shouldContinueOperation: withPhase: atPercent: withAttributes: метод делегата. Это оболочка для функции прогресса фильма QuickTime, которая будет использоваться для отображения диалогового окна, отображающего ход экспорта, и для того, чтобы позволить пользователю отменить операцию. Вот попробуйте это

- (BOOL)movie:(QTMovie *)movie 
      shouldContinueOperation:(NSString *)op 
      withPhase:(QTMovieOperationPhase)phase 
      atPercent:(NSNumber *)percent 
      withAttributes:(NSDictionary *)attributes
{
   OSErr err = noErr;
   NSEvent *event;
   double percentDone = [percent doubleValue] * 100.0;

   switch (phase) {
      case QTMovieOperationBeginPhase:
         // set up the progress panel
         [progressText setStringValue:op];
         [progressBar setDoubleValue:0];

         // show the progress sheet
         [NSApp beginSheet:progressPanel 
            modalForWindow:[movieView window] modalDelegate:nil 
            didEndSelector:nil contextInfo:nil];
         break;
      case QTMovieOperationUpdatePercentPhase:
         // update the percent done
         [progressBar setDoubleValue:percentDone];
         [progressBar display];
         break;
      case QTMovieOperationEndPhase:
         [NSApp endSheet:progressPanel];
         [progressPanel close];
         break;
   }

   // cancel (if requested)
   event = [progressPanel 
         nextEventMatchingMask:NSLeftMouseUpMask 
         untilDate:[NSDate distantPast] 
         inMode:NSDefaultRunLoopMode dequeue:YES];
   if (event && NSPointInRect([event locationInWindow], 
                                          [cancelButton frame])) {
      [cancelButton performClick:self];
      err = userCanceledErr;
   }

   return (err == noErr);
}

Надеюсь, это поможет.

Если вам нужна помощь, дайте мне знать. дайте мне знать, если это помогло.

PK

...