2016-01-04 39 views
-1

我使用下面的代码与它的覆盖视图一起显示UIPickerController: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在画像时在底部显示一个黑条。您可能会在所附的屏幕截图中看到横幅中没有横条。如何解决它? Portrait Landscape

+0

看起来overlayView是以编程方式创建的,您需要调整overlayView的模式(Scale to Fill,Aspect Fit,..)或调整摄像头视图的大小。 在您的肖像截图中,相机视图适合主视图,并且由于相机(4:3)和iPhone屏幕(16:9)的高宽比不同,您会看到黑条。 在您的横向屏幕截图中,似乎缩放了相机视图以填充屏幕,但图像在顶部和底部被裁剪。 – iCode

+0

那我应该怎么做呢?我不能依靠未来设备的最终尺寸来正确地加热屏幕......是不是有办法填满屏幕,所以它是? –

+0

为overlayView我坦率地说,没有其他方式来创建它,但编程。甚至连UIImagePicker控制器都没有Storyboard对应物,关于它的overlayView怎么说?! –

回答

0

我实现了其作为线程建议在故事板插入后的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指向上方时,图像横向移动,反之亦然。 Rotated image 它可能是固定的或我需要放弃景观选项?