Проблемы с наложением камеры iOS
Мне нужно создать собственное наложение камеры в моем приложении, и я испытываю трудности с тем, чтобы он действительно делал фотографии, переключал камеру спереди назад и отменял.
Я создал класс CameraOverlayViewController и настроил все представления в раскадровке.
Когда пользователь выбирает фотографию, вот что я делаю, чтобы получить оверлей:
CameraOverlayViewController *customerOverlay = [self.storyboard instantiateViewControllerWithIdentifier:@"camera_overlay"];
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.showsCameraControls = NO;
picker.cameraOverlayView = customerOverlay.view;
customerOverlay.pickerRefernce = picker;
[self presentViewController:picker animated:YES completion:nil];
Это прекрасно работает при отображении наложения камеры, как я хочу, чтобы это было видно.
Вот мой код для CameraOverlayViewController:
#import <UIKit/UIKit.h>
@interface CameraOverlayViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate>
@property (strong, nonatomic) UIImagePickerController *pickerRefernce;
@property (weak, nonatomic) IBOutlet UIButton *cameraButton;
@property (weak, nonatomic) IBOutlet UIView *navBar;
- (IBAction)takePicture:(id)sender;
- (IBAction)switchCamera:(id)sender;
- (IBAction)cancelPicture:(id)sender;
@end
//iphone screen dimensions
#define SCREEN_WIDTH self.view.bounds.size.width
#define SCREEN_HEIGTH self.view.bounds.size.height
@interface CameraOverlayViewController ()
@end
@implementation CameraOverlayViewController
@synthesize pickerRefernce = _pickerRefernce;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor clearColor];
self.navBar.backgroundColor = [UIColor PFYellow];
self.cameraButton.frame = CGRectMake((SCREEN_WIDTH / 2) - (self.cameraButton.frame.size.width / 2), SCREEN_HEIGTH - self.cameraButton.frame.size.height - 20, self.cameraButton.frame.size.width, self.cameraButton.frame.size.height);
}
- (IBAction)takePicture:(id)sender {
[self.pickerRefernce takePicture];
}
- (IBAction)switchCamera:(id)sender {
if(self.pickerRefernce.cameraDevice == UIImagePickerControllerCameraDeviceFront) {
self.pickerRefernce.cameraDevice = UIImagePickerControllerCameraDeviceRear;
} else {
self.pickerRefernce.cameraDevice = UIImagePickerControllerCameraDeviceFront;
}
}
- (IBAction)cancelPicture:(id)sender {
}
В основном, когда я нажимаю любую кнопку в режиме наложения (включая кнопку отмены, в которой нет кода, вызывающего ошибку), я получаю серьезную ошибку в Xcode.
Единственный вывод - "(lldb)", и в main.m выдается исключение, которое говорит: "Поток 1: EXC_BAD_ACCESS(код = 1, адрес =0x69786d54)
Приложение просто продолжает работать (вид с камеры по-прежнему отображает живое изображение), но нажатие на что-либо не имеет никакого ответа.
Кроме того, я нажимал кнопку "Продолжить выполнение программы" не менее 200 раз, пытаясь вызвать ее аварийное завершение, но ничего не произошло.
Все примеры, которые я нашел в Интернете, устарели (даже в примере с яблоками "PhotoPicker" используется файл xib и странные материалы, к которым я не привык), и все ответы, которые я нашел здесь, объясняют, как отобразить представление, а не как убедиться, что он вызывает все правильные методы.
Любое руководство было бы здорово, спасибо!