1

У меня есть UIButton внутри UIView, который я установил как cameraOverlayView.UIButton внутри UIImagePickerController.cameraOverlayView не отвечает

Я также масштабировал камеру uiimagepicker для охвата всего экрана (как вы можете видеть ниже на картинке).

enter image description here

Вот мой код:

// CameraViewController.m 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    if(!self.imagePickerController) 
     [self setupCamera]; 
} 

-(void)setupCamera{ 
    self.imagePickerController = [[UIImagePickerController alloc] init]; 
    self.imagePickerController.modalPresentationStyle = UIModalPresentationCurrentContext; 
    self.imagePickerController.delegate = self; 
    self.imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera; 
    self.imagePickerController.showsCameraControls = NO; 

    self.imagePickerController.cameraOverlayView = self.overlayView; 

    [self scaleCameraPreview]; 

    // Present picker in the next loop (to avoid warning - "Presenting view controllers on detached view controllers is discouraged") 
    [self performSelector:@selector(presentPicker) withObject:nil afterDelay:0.0]; 
} 

-(void)presentPicker{ 
    [self presentViewController:self.imagePickerController animated:NO completion:nil]; 
} 

-(void)scaleCameraPreview{ 
    CGSize screenSize = [[UIScreen mainScreen] bounds].size; 

    int heightOffset = 0; 

    if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) 
    { 
     heightOffset = 120; 
    } 

    float cameraAspectRatio = 4.0/3.0; 
    float imageWidth = floorf(screenSize.width * cameraAspectRatio); 
    float scale = ceilf(((screenSize.height + heightOffset)/imageWidth) * 10.0)/10.0; 
    self.imagePickerController.cameraViewTransform = CGAffineTransformMakeScale(scale, scale); 
} 

-(IBAction)cameraButtonPressed:(id)sender{ 
    [self.imagePickerController takePicture]; 
} 

И это моя иерархия viewcontrollers:

- UINavigationController 
    - SWRevealViewController (manages a drawer functionality between different controllers) 
    - UINavigationController (current controller for the camera) 
     - CameraViewController 
     - PickerViewController (Presented modally as you can see above) 
      - PhotoTakenViewController (Controller that will fire after UIImagePicker returns an image) 

EDIT: Добавление наложения информации

enter image description here

Я искал в Интернете похожие темы (например, UIImagePickerController Overlay Buttons Not Firing), но не нашел решения.

UIButton, который вы видите на картинке, находится внутри UIView, это overlayView в коде, присвоенном CameraOverlayView. Он также подключен к функции CameraButtonPressed: через выход, и он отлично работает, если я не добавляю UIImagePickerController.

Он не отвечает ни на какие прикосновения, я не знаю почему.

Кто-нибудь знает, что происходит?

+0

попробуйте установить (setupCamera method) в 'viewWillAppear' – Pushparaj

+0

уже пробовал, не работал @zala – jonypz

+0

@jonypz tr [self.view bringSubviewToFront: btn]; – Jageen

ответ

0

Я исправил мой вопрос, но я верю в схематичном виде:

[self presentViewController:self.imagePickerController animated:NO completion:^(void){ 

    // Re-add the button so it is on top of the overlay 
    [self.imagePickerController.view addSubview:self.takePhotoButton]; 
}]; 

будет, возможно, вернусь позже к этому вопросу и после обновления в случае, если я найти лучшее решение.