Ответ 1
Ну, UIImagePickerController
- это тот инструмент, который вам нужен. Он будет делать большую часть материала в этом контрольном списке.
Для кнопки вы можете создать пользовательскую кнопку с графикой или если вы планируете использовать панель инструментов или панель навигации, чтобы удерживать кнопки, вы можете создать кнопку панели с помощью UIBarButtonSystemItemCamera
. Это даст вам изображение рамки.
При нажатии на него вы создадите экземпляр UIImagePickerController
и представите его в текстовом формате.
UIImagePickerController * imagePicker = [[UIImagePickerController alloc] init];
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePicker.delegate = self;
[self presentModalViewController:imagePicker animated:YES];
[picker release];
Как вы, должно быть, заметили, что у него есть свойство delegate
, которое определено как id < UIImagePickerControllerDelegate, UINavigationControllerDelegate> delegate;
, поэтому вам придется принять оба протокола, но в большинстве случаев вы реализуете только два метода - imagePickerControllerDidCancel:
и imagePickerController:didFinishPickingMediaWithInfo:
, Существует еще один метод в протоколе UIImagePickerControllerDelegate
, но он устарел. Не используйте его, даже если вы видите, что здесь много упоминается. Вы ожидали бы, что обработчик отмены будет написан следующим образом:
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
[self dismissModalViewControllerAnimated:YES];
}
Другие методы - это то, где вы делаете большую часть материала.
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage * image = [info objectForKey:UIImagePickerControllerEditedImage];
// You have the image. You can use this to present the image in the next view like you require in `#3`.
[self dismissModalViewControllerAnimated:YES];
}
Выполнение снимка выполняется автоматически экземпляром UIImagePickerController
. Однако, если вы хотите переопределить их элементы управления, вы можете сделать это, установив showsCameraControls
в NO
, а затем реализуя свой собственный cameraOverlayView
. Если вы сделали это и назначили кнопку для съемки, вы можете инициировать действие изображения с помощью метода takePicture
. Таким образом, это должно касаться #2
.
Вы можете использовать другие свойства, чтобы настроить свой выборщик изображений. Например, вы можете ограничить пользователя только взятием изображений с помощью свойства mediaTypes
.