UIPickerController 留下黑色底栏
UIPickerController leaves black bottom bar
我正在使用以下代码来显示 UIPickerController 及其叠加视图:
-(void) viewDidLoad{
self.overlayView = [[OverlayViewController alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.overlayView.delegate = self;
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePickerController.modalPresentationStyle = UIModalPresentationFullScreen;
imagePickerController.cameraOverlayView.frame=self.view.frame;
imagePickerController.showsCameraControls = NO;
imagePickerController.navigationBarHidden = YES;
imagePickerController.toolbarHidden = YES;
//imagePickerController.cameraViewTransform = CGAffineTransformScale(imagePickerController.cameraViewTransform, 1.0, 1.3);
imagePickerController.delegate = self.overlayView;
// as a delegate we will be notified when pictures are taken and when to dismiss the image picker
[self.view addSubview:imagePickerController.view];
imagePickerController.cameraOverlayView =self.overlayView.view;
} else {
[self.view addSubview:self.overlayView.view];
}
}
然而,当 iPhone 保持纵向时,屏幕底部会显示一个黑条。正如您在随附的屏幕截图中看到的那样,横屏中没有显示栏。如何解决?
我认为这个问题:How to get the custom overlay for UIImagePicker camera to be full screen in iOS 7? 是关于同一个问题,你可以在那里找到答案。
在故事板中插入 viewController 后,我按照线程中的建议实现了它:
-(void) viewDidLoad{
self.overlayView = [[OverlayViewController alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.overlayView.delegate = self;
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePickerController.modalPresentationStyle = UIModalPresentationFullScreen;
imagePickerController.cameraOverlayView.frame=self.view.frame;
imagePickerController.showsCameraControls = NO;
imagePickerController.navigationBarHidden = YES;
imagePickerController.toolbarHidden = YES;
//imagePickerController.cameraViewTransform = CGAffineTransformScale(imagePickerController.cameraViewTransform, 1.0, 1.3);
imagePickerController.delegate = self.overlayView;
// as a delegate we will be notified when pictures are taken and when to dismiss the image picker
self.overlayView=[self.storyboard instantiateViewControllerWithIdentifier:@"OverlayViewController"];
[self.view addSubview:imagePickerController.view];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showSlider) name:@"showSlider" object:nil];
imagePickerController.cameraOverlayView =self.overlayView.view;
CGSize screenSize = [[UIScreen mainScreen] bounds].size;
float cameraAspectRatio = 4.0 / 4.0; //! Note: 4.0 and 4.0 works
float imageWidth = floorf(screenSize.width * cameraAspectRatio);
float scale = ceilf((screenSize.height / imageWidth) * 10.0) / 10.0;
self.imagePickerController.cameraViewTransform = CGAffineTransformMakeScale(scale, scale);
} else {
[self.view addSubview:self.overlayView.view];
}
}
事实上,将 cameraAspectRatio 调整为 4.0、4.0 后一切正常。然而,当横向显示应用程序时,图像和控件会颠倒过来。这是我的门把手显示的方式。此外,当我将 iPhone 指向上方时,图像会横向移动,反之亦然。
可以修复还是我需要放弃横向选项?
对于任何可以使用它的人来说,他就是swift中的代码:
@IBAction func takePhoto(_ sender: Any) {
imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .camera
imagePicker.cameraCaptureMode = .photo
imagePicker.cameraDevice = .front
imagePicker.cameraOverlayView?.frame = view.frame
imagePicker.showsCameraControls = false
imagePicker.isNavigationBarHidden = true
imagePicker.isToolbarHidden = true
let screenSize = UIScreen.main.bounds.size
let cameraAspectRatio: Float = 4.0 / 4.0
let imageWidth = floorf(Float(screenSize.width * CGFloat(cameraAspectRatio)))
let scale = ((screenSize.height / CGFloat(imageWidth)) * 10.0).rounded() / 10.0;
imagePicker.cameraViewTransform = CGAffineTransform(scaleX: CGFloat(scale), y: CGFloat(scale))
present(imagePicker, animated: false, completion: nil)
}
在我的情况下,我通过按钮调用此屏幕。
我正在使用以下代码来显示 UIPickerController 及其叠加视图:
-(void) viewDidLoad{
self.overlayView = [[OverlayViewController alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.overlayView.delegate = self;
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePickerController.modalPresentationStyle = UIModalPresentationFullScreen;
imagePickerController.cameraOverlayView.frame=self.view.frame;
imagePickerController.showsCameraControls = NO;
imagePickerController.navigationBarHidden = YES;
imagePickerController.toolbarHidden = YES;
//imagePickerController.cameraViewTransform = CGAffineTransformScale(imagePickerController.cameraViewTransform, 1.0, 1.3);
imagePickerController.delegate = self.overlayView;
// as a delegate we will be notified when pictures are taken and when to dismiss the image picker
[self.view addSubview:imagePickerController.view];
imagePickerController.cameraOverlayView =self.overlayView.view;
} else {
[self.view addSubview:self.overlayView.view];
}
}
然而,当 iPhone 保持纵向时,屏幕底部会显示一个黑条。正如您在随附的屏幕截图中看到的那样,横屏中没有显示栏。如何解决?
我认为这个问题:How to get the custom overlay for UIImagePicker camera to be full screen in iOS 7? 是关于同一个问题,你可以在那里找到答案。
在故事板中插入 viewController 后,我按照线程中的建议实现了它:
-(void) viewDidLoad{
self.overlayView = [[OverlayViewController alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.overlayView.delegate = self;
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePickerController.modalPresentationStyle = UIModalPresentationFullScreen;
imagePickerController.cameraOverlayView.frame=self.view.frame;
imagePickerController.showsCameraControls = NO;
imagePickerController.navigationBarHidden = YES;
imagePickerController.toolbarHidden = YES;
//imagePickerController.cameraViewTransform = CGAffineTransformScale(imagePickerController.cameraViewTransform, 1.0, 1.3);
imagePickerController.delegate = self.overlayView;
// as a delegate we will be notified when pictures are taken and when to dismiss the image picker
self.overlayView=[self.storyboard instantiateViewControllerWithIdentifier:@"OverlayViewController"];
[self.view addSubview:imagePickerController.view];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showSlider) name:@"showSlider" object:nil];
imagePickerController.cameraOverlayView =self.overlayView.view;
CGSize screenSize = [[UIScreen mainScreen] bounds].size;
float cameraAspectRatio = 4.0 / 4.0; //! Note: 4.0 and 4.0 works
float imageWidth = floorf(screenSize.width * cameraAspectRatio);
float scale = ceilf((screenSize.height / imageWidth) * 10.0) / 10.0;
self.imagePickerController.cameraViewTransform = CGAffineTransformMakeScale(scale, scale);
} else {
[self.view addSubview:self.overlayView.view];
}
}
事实上,将 cameraAspectRatio 调整为 4.0、4.0 后一切正常。然而,当横向显示应用程序时,图像和控件会颠倒过来。这是我的门把手显示的方式。此外,当我将 iPhone 指向上方时,图像会横向移动,反之亦然。
对于任何可以使用它的人来说,他就是swift中的代码:
@IBAction func takePhoto(_ sender: Any) {
imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .camera
imagePicker.cameraCaptureMode = .photo
imagePicker.cameraDevice = .front
imagePicker.cameraOverlayView?.frame = view.frame
imagePicker.showsCameraControls = false
imagePicker.isNavigationBarHidden = true
imagePicker.isToolbarHidden = true
let screenSize = UIScreen.main.bounds.size
let cameraAspectRatio: Float = 4.0 / 4.0
let imageWidth = floorf(Float(screenSize.width * CGFloat(cameraAspectRatio)))
let scale = ((screenSize.height / CGFloat(imageWidth)) * 10.0).rounded() / 10.0;
imagePicker.cameraViewTransform = CGAffineTransform(scaleX: CGFloat(scale), y: CGFloat(scale))
present(imagePicker, animated: false, completion: nil)
}
在我的情况下,我通过按钮调用此屏幕。