2014-11-26 2 views
0

Я разрабатываю приложение для камеры, которое имеет функцию видео. Я хочу кнопку, которую пользователь нажимает, чтобы начать запись, что она делает, и прекратить запись. Это работает правильно. Но, я хочу поднять альфа recordButton до 1.0 при нажатии кнопки. Это работает правильно, но когда он снова нажат, чтобы остановить запись, альфа остается в 1.0. Оператор if...else, который прекращает запись, должен вызывать [self.recordButton setAlpha:0.50], но по какой-то причине ничего не происходит, кроме записи, останавливающейся должным образом. Любые разъяснения были бы весьма признательны.setAlpha не запускается после появления touchUpInside

- (IBAction)toggleMovieRecording:(id)sender 
{ 
[[self recordButton] setEnabled:NO]; 

dispatch_async([self sessionQueue], ^{ 
    if (![[self movieFileOutput] isRecording]) 
    { 
     [self setLockInterfaceRotation:YES]; 

     [self.recordButton setAlpha:1.0]; 

     if ([[UIDevice currentDevice] isMultitaskingSupported]) 
     { 
      // Setup background task. This is needed because the captureOutput:didFinishRecordingToOutputFileAtURL: callback is not received until the app returns to the foreground unless you request background execution time. This also ensures that there will be time to write the file to the assets library when the app is backgrounded. To conclude this background execution, -endBackgroundTask is called in -recorder:recordingDidFinishToOutputFileURL:error: after the recorded file has been saved. 
      [self setBackgroundRecordingID:[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil]]; 
     } 

     // Update the orientation on the movie file output video connection before starting recording. 
     [[[self movieFileOutput] connectionWithMediaType:AVMediaTypeVideo] setVideoOrientation:[[(AVCaptureVideoPreviewLayer *)[[self previewView] layer] connection] videoOrientation]]; 

     // Turn OFF flash for video recording 
     [AAPLCameraViewController setFlashMode:AVCaptureFlashModeOff forDevice:[self videoDevice]]; 

     // Start recording to a temporary file. 
     NSString *outputFilePath = [NSTemporaryDirectory() stringByAppendingPathComponent:[@"movie" stringByAppendingPathExtension:@"mov"]]; 
     [[self movieFileOutput] startRecordingToOutputFileURL:[NSURL fileURLWithPath:outputFilePath] recordingDelegate:self]; 

    } 
    else 
    { 
     [[self movieFileOutput] stopRecording]; 
     [self.recordButton setAlpha:0.50]; 
    } 
}); 
} 

ответ

0

Вы должны убедиться, что в главной очереди должно быть выполнено что-либо, связанное с пользовательским интерфейсом. Проверьте этот ответ iPhone - Grand Central Dispatch main thread

Чтобы добавить этот блок в настройку alpha.

dispatch_async(dispatch_get_main_queue(), ^{ 
      [self.recordButton setAlpha:0.50]; 
     }); 

Сообщите мне, если это сработало.

+0

Отлично! Счастливое кодирование! – Yan

Смежные вопросы