UIImagePickerController
ビデオのキャプチャに使用する、やや奇妙な動作が発生しています。ユーザーがビデオを録画して選択し、ビューコントローラーを閉じた後、いずれかのアプリをタップUITextField
すると、アプリは再び「録画」モードになりますが、UIImagePickerController
表示されません。ボリュームロッカーが停止/録音ボタンになり(押すとそれぞれのチャイムが鳴ります)、キーボードが「クリック」を停止し(録音が進行中のときはいつもそうです)、アプリを閉じると次のことができます。赤い録音ステータスバーが一瞬点滅するのを見てください。
繰り返しにUIImagePickerController
なりますが、その時点では存在しませんが、アプリは何かを記録しているように動作します。ただし、ボリュームロッカーを押して一部のクリップを実際に「記録」しても、ライブラリに保存されません(私のdidFinishPickingMediaWithInfo
方法とは異なります)。
ピッカーを初期化する方法は次のとおりです。
self.cameraController = [[UIImagePickerController alloc] init];
self.cameraController.sourceType = UIImagePickerControllerSourceTypeCamera;
self.cameraController.mediaTypes = @[(NSString*)kUTTypeMovie];
self.cameraController.videoQuality = UIImagePickerControllerQualityType640x480;
self.cameraController.delegate = self;
これが私のdidFinishPickingMediaWithInfo
ものです(ユーザーの写真ライブラリに使用される別のライブラリと共有UIImagePickerController
されているため、いくつかの無関係なロジックがあります):
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
// Dismiss the picker
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad && [picker isEqual:self.photoLibraryController])
[self.photoLibraryPopover dismissPopoverAnimated:YES];
else
[picker dismissModalViewControllerAnimated:YES];
// Save the media URL
if (info[UIImagePickerControllerMediaURL])
[self.uploadDataDictionary setObject:info[UIImagePickerControllerMediaURL] forKey:@"mediaURL"];
// Identify the source of the media (camera or library)
[self.uploadDataDictionary setObject:picker forKey:@"sourcePicker"];
// If it comes from the camera picker, save the video in the library
NSString *videoPath = [info[UIImagePickerControllerMediaURL] path];
if ([picker isEqual:self.cameraController] && UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(videoPath)) {
UISaveVideoAtPathToSavedPhotosAlbum(videoPath, self, nil, nil);
}
}
そして、上記の奇妙さを引き起こすテキストフィールドのタップ反応:
- (void)textFieldDidBeginEditing:(UITextField *)textField {
float textFieldPosition = textField.frame.origin.y - 20;
[self.formView setContentOffset:CGPointMake(0, textFieldPosition) animated:YES];
}
アプリのその部分には他にもたくさんのボタンとテキストビューがありますが、どれもこの奇妙な「バックグラウンドレコーディング」モードに入ることができません。
また、私は明らかにこのプロジェクトにARCを使用しています。
問題の原因は何でしょうか?