После съемки невозможно выбрать "Использовать фотографию" или "Повторить"
Итак, я пытаюсь обновить приложение для iOS 7, и у меня возникают проблемы с моим пользовательским наложением. Оверлей - это изображение, которое я рисую на фотографии с помощью (как в режиме реального времени, так и с использованием версии с полным разрешением для окончательного результата в кадре камеры). Проблема в том, что теперь под iOS 7 наложение, в то время как прозрачное снизу, обеспечивает доступ к обычной кнопке "снимок", но по какой-то причине не позволит мне нажать кнопки "Использовать фотографию" или "Повторить" которые появляются после снимка. Здесь фрагмент кода, вызывающий контроллер вида:
- (IBAction)takePhoto:(UIButton *)sender {
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = NO;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.showsCameraControls = YES;
// Overlay Creation
UIView* overlayView = [[UIView alloc] initWithFrame:picker.view.frame];
overlayView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"PBOverlayView.png"]];
[overlayView.layer setOpaque:NO];
overlayView.opaque = NO;
picker.cameraOverlayView = overlayView;
[self presentViewController:picker animated:YES completion:NULL];
}
Ответы
Ответ 1
Другим подходом может быть наблюдение за уведомлениями, когда ImagePicker изменяет состояние и удаляет (или отключает) наложение при переходе на экран "Использовать фотографию".
- (void) addPhotoObservers {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(removeCameraOverlay) name:@"_UIImagePickerControllerUserDidCaptureItem" object:nil ];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(addCameraOverlay) name:@"_UIImagePickerControllerUserDidRejectItem" object:nil ];
}
- (void) removePhotoObservers {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
-(void)addCameraOverlay {
if (self.cameraPicker) {
self.cameraPicker.cameraOverlayView = self.myCameraOverlayView;
}
}
-(void)removeCameraOverlay {
if (self.cameraPicker) {
self.cameraPicker.cameraOverlayView = nil;
}
}
Ответ 2
Ваша проблема: когда вы инициализировали overlayView, вы установили, что кадр будет такого же размера, как у сборщика. UIView* overlayView = [[UIView alloc] initWithFrame:picker.view.frame];
Объяснение: Перед захватом изображения кнопки камеры находятся на переднем плане overlayView, так что нет никаких проблем с их нажатием.
После захвата изображения (на странице "перемотка/использование предварительного просмотра" ) наложение верхнего плана - это тот, который будет на переднем плане, тем самым блокируя доступ к кнопкам.
Я знаю, что это проблема на iOS7, и не уверен в других версиях.
Возможные решения: поскольку это естественная проблема в Apple UIImagePickerController, я могу думать только о двух решениях: (1) Если возможно, настройте overlayView на более короткий фрейм, который не будет закрывать нижнюю часть сборщика; (2) Если вам нужно наложение для покрытия этих кнопок, у вас все еще есть исчерпывающий вариант настройки self.imagePicker.showsCameraControls = NO;
, но тогда вам придется настроить ВСЕ поведение камеры (вы можете найти много примеров для этого в Интернете).
Ответ 3
Вы можете установить User Enteraction Enabled
на NO
на Overlay View;) работает для меня
Ответ 4
После того, как сделана фотография или анимация на вашем оверлее, я заставил ее работать, удалив оверлей из своего супервизора.
[UIView animateWithDuration:1
delay:1
options:UIViewAnimationOptionCurveEaseOut
animations:^{
} completion:^(BOOL finished) {
[self.view removeFromSuperview];
}];