2009-10-30 2 views
1

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

Что я хочу сделать, это открыть камеру и сделать снимок автоматически без необходимости взаимодействия пользователя с сборщиком или редактирования изображения. Так что я подкласс 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 это, и я слышу звук камеры, делающей снимок). ОверлейПроект отображается просто отлично. Тем не менее, метод делегата didFinishPickingMediaWithInfo: никогда не вызывается, а imagePickerControllerDidCancel также не вызван.

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

например:

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

или showCameraControls:

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

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

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

ответ

2

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

0

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

0

- (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]; 
}