2012-07-03 85 views
0

我想在相机视图中为黑色条形变色。以下方法迄今尚无法运作。有两个视图需要更改,第一个是摄像头图标和“取消”,第二个是“重拍”和“使用”按钮。有任何想法吗?如何更改UIImagePicker中的栏颜色?

- (void)openCamera { 
    UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 
    picker.delegate = self; 
    picker.sourceType = UIImagePickerControllerSourceTypeCamera; 
    picker.navigationBar.barStyle = UIBarStyleBlackOpaque; 
    picker.toolbar.barStyle = UIBarStyleBlackOpaque; 
    picker.navigationBar.tintColor = [UIColor blackColor]; 
    [self presentModalViewController:picker animated:NO]; 
} 

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    UIImagePickerController *picker = (UIImagePickerController *)navigationController; 
    if((picker)&&(picker.sourceType == UIImagePickerControllerSourceTypeCamera)) 
    { 
     picker.navigationController.navigationBar.barStyle = UIBarStyleBlackOpaque; 
     picker.navigationController.toolbar.barStyle = UIBarStyleBlackOpaque; 
     picker.navigationBar.tintColor = [UIColor blackColor]; 
    } 
} 

回答

2

使用UIAppearance可能会带来一些好运。查找documentation

+0

非常好,能够改变所有UIToolbars和UINavigationBars不幸的是UIImagePicker似乎使用别的东西。 –

+0

嗯......有趣。我的印象是,它使用了'UINavigationController',它有自己的'UINavigationBar' ... – Jasarien

+0

你有没有尝试过将'bar style设置为'UIBarStyleDefault'并使用'tintColor'? – Jasarien

0

您可以使用UIImagePickerControllershowsCameraControlscameraOverlayViewUIImagePickerController使用自定义视图。将showsCameraControls的值设置为NO将隐藏UIImagePickerController上的所有内容,但隐藏相机视图。 cameraOverlayView允许您将自己的视图放在相机视图上。然后,您可以使用自己的底部条,自己的按钮创建一个视图,并将其放在UIImagePicker的前面。

UIView *overlayView = [[UIView alloc] init]; 
/* Customize overlayView with your bottomBar and button */ 
UIImagePickerController imagePickerController = [[UIImagePickerController alloc] init]; 
/* Configure your UIImagePickerController for picture and/or video */ 
imagePickerController.showsCameraControls = NO; //Must be set to NO if you want to use the cameraOverlayView 
imagePickerController.cameraOverlayView = overlayView; 
overlayView = nil; 

不幸的是,用这种方法,您必须重建原始UIImagePickerController视图(闪光灯模式按钮,选项按钮,...)如果你想使用它们的所有按钮,你必须创建自己的导航控制器通过“重新拍摄”和“使用”按钮进入视图。然而,实施起来非常简单。

+1

我该如何去实现具有视图和“重拍”和“使用”按钮的导航控制器? – bmueller