После съемки невозможно выбрать "Использовать фотографию" или "Повторить"

Итак, я пытаюсь обновить приложение для 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];
                 }];