Вот простой способ сделать это, проверенный на iPhone4s/iOS5.1 и iPhone3G/iOS6.1.
Я использую образец Apple PhotoPicker и делаю пару небольших изменений. Я ожидаю, что вы сможете адаптировать этот подход для своего проекта. Основная идея состоит в том, чтобы использовать уведомления для запуска метода каждый раз, когда мы вращаемся. Если этот метод находится в контроллере представления наложения, он может продолжать манипулировать наложением во время отображения imagePicker.
В OverlayViewController.m
добавьте это в initWithNibName
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
NSNotificationCenter* notificationCenter = [NSNotificationCenter defaultCenter];
[notificationCenter addObserver:self
selector:@selector(didChangeOrientation)
name:@"UIDeviceOrientationDidChangeNotification"
object:nil];
Эти уведомления продолжают отправляться, пока отображается pickerController. Итак, здесь, в контроллере представления оверлея, вы можете продолжить играть с интерфейсом, например:
- (void) didChangeOrientation
{
if (UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation])) {
self.cancelButton.image =[UIImage imageNamed:@"portait_image.png"];
} else {
self.cancelButton.image =[UIImage imageNamed:@"landscape_image.png"];
}
}
вам нужно будет убить уведомление и удалить наблюдателя в viewDidUnload
:
[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] removeObserver:self];
Обратите внимание на то, как разработано это приложение: overlayViewController действует как оболочка вокруг imagePickerController. Итак, вы вызываете imagePicker через overlayViewController:
[self presentModalViewController:self.overlayViewController.imagePickerController animated:YES];
OverlayViewController выступает в качестве делегата для imagePickerController и, в свою очередь, имеет методы делегата для передачи информации обратно вызывающему контроллеру представления.
В качестве альтернативы можно вообще не использовать UIImagePickerController, а использовать Захват мультимедиа AVFoundation, что дает вам гораздо более детальный контроль над процессом создания изображений за счет (немного) большей сложности .
person
foundry
schedule
15.02.2013