У меня есть UIButton внутри UIView, который я установил как cameraOverlayView.UIButton внутри UIImagePickerController.cameraOverlayView не отвечает
Я также масштабировал камеру uiimagepicker для охвата всего экрана (как вы можете видеть ниже на картинке).
Вот мой код:
// 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: Добавление наложения информации
Я искал в Интернете похожие темы (например, UIImagePickerController Overlay Buttons Not Firing), но не нашел решения.
UIButton, который вы видите на картинке, находится внутри UIView, это overlayView в коде, присвоенном CameraOverlayView. Он также подключен к функции CameraButtonPressed: через выход, и он отлично работает, если я не добавляю UIImagePickerController.
Он не отвечает ни на какие прикосновения, я не знаю почему.
Кто-нибудь знает, что происходит?
попробуйте установить (setupCamera method) в 'viewWillAppear' – Pushparaj
уже пробовал, не работал @zala – jonypz
@jonypz tr [self.view bringSubviewToFront: btn]; – Jageen