Вопрос

Я пытаюсь использовать интерфейс UIImagePickerController из OS 3.1 с cameraOverlayView и takePicture, но мне явно не удалось понять, как это работает, и поэтому я не получаю желаемого поведения.

Я хочу открыть камеру и сделать снимок автоматически, без необходимости взаимодействия пользователя с средством выбора или редактирования изображения.Поэтому я создаю подкласс UIImagePickerController (аналогично примеру в http://github.com/pmark/Helpful-iPhone-Utilities/tree/master/BTL%20Utilities/) и отключите все элементы управления:

- (void)displayModalWithController:(UIViewController*)controller animated:(BOOL)animated {
self.sourceType = UIImagePickerControllerSourceTypeCamera;
self.showsCameraControls = NO;
self.navigationBarHidden = YES;
self.toolbarHidden = YES;
    // Setting the overlay view up programmatically.
ipView = [[ImagePickerView alloc] init];
self.cameraOverlayView = ipView;
[controller presentModalViewController:self animated:NO];
}

В overlayView мне удалось принудительно запустить метод takePicture UIImagePickerController (я знаю это, потому что могу это NSLog и слышу звук камеры, делающей снимок).OverlayView отображается нормально.Однако метод делегата сделалFinishPickingMediaWithInfo:никогда не вызывается, и imagePickerControllerDidCancel также не вызывается.

Итак, как мне либо вызвать методы делегата, либо сохранить изображение, переопределив метод takePicture?(Я понятия не имею, как сюда захватить данные изображения, и Google, похоже, меня подвел).Я не могу избавиться от ощущения, что мне не удалось понять, как работает UIImagePickerController, но документация не слишком полезна:

например.:

«Вы можете предоставить настраиваемое представление наложения для отображения пользовательского интерфейса съемки изображений и можете инициировать съемку изображений из своего кода.Пользовательский вид наложения может отображаться в дополнение к элементам управления по умолчанию, предоставляемым интерфейсом выбора изображений, или вместо них».

или из showCameraControls:

«Если вы установите это свойство на NO и предоставите свои собственные пользовательские элементы управления, вы можете сделать несколько снимков, прежде чем увольнять интерфейс Picker». - Как мне отклонить интерфейс Picker?

Примечание:делегат правильно настроен в IB, так что проблема не в этом.

Спасибо за любую помощь, которую вы можете оказать!

Это было полезно?

Решение

Я обнаружил, что вам просто нужно подождать «достаточно долго», прежде чем звонить. takePicture, или он просто молча терпит неудачу.У меня нет хорошего ответа на вопрос, как определить минимальное значение «достаточно долго», которое всегда будет работать, но если вы установите таймер и подождите пять или десять секунд, все будет в порядке.Было бы неплохо, если бы он возвращал какую-то ошибку «Я еще не готов сфотографировать, извините» либо напрямую из takePicture или через делегата, но, насколько я знаю, это не так.

Другие советы

В качестве обновления к моему собственному вопросу:Оказывается, я слишком рано пытался использовать takePicture.Когда я переместил действие на кнопку наложения и отправил takePicture с этой кнопки (как только средство выбора было представлено модально), методы делегата сработали так, как и должны.Я не знаю, достижимо ли то, что я хотел - сделать изображение без необходимости автоматического нажатия этой кнопки - но если это так, то это, вероятно, придется сделать, отправив takePicture когда-нибудь после того, как я попытаюсь его использовать.

-(void) ImageMethod: (id) отправитель {imagePickerController = [[uiimagePickerController alloc] init];imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

imagePopover=[[UIPopoverController alloc]initWithContentViewController:imagePickerController];
[imagePopover presentPopoverFromRect:importButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top