2014-01-11 2 views
4

Мне нужно мое изображение, чтобы иметь черное непрозрачное нижнее и верхнее полоски при съемке. Я хочу, чтобы она выглядела так же, как это:UIImagePickerController черный непрозрачный нижний стержень

http://imgur.com/Qdbp6fP

Это на самом деле то, что я работает мой код на моем iPhone 5 под управлением IOS 7. Но когда я собрал свой код на iPhone 4S (IOS 7 тоже) , нижняя панель становится прозрачной - вид становится камерой сверху вниз, как приложение камеры сейчас. Даже кнопка «Take Picture» становится прозрачной, как SnapChat. Я ненавижу это. Какую настройку мне нужно изменить, чтобы нижняя панель стала непрозрачной на моем iPhone 4S? Я использую автозапуск.

Это в моем viewDidAppear:

if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) 
    { 
     self.anImagePickerController = [UIImagePickerController new]; 
     self.anImagePickerController.delegate = self; 
     self.anImagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera; 
     self.anImagePickerController.showsCameraControls = YES; 

     [self presentViewController:self.anImagePickerController animated:NO completion:Nil]; 
    } 

ответ

1

Код ниже сделает именно то, что вы хотите. Я обнаружил это сам, поскольку я хотел сделать то же самое, что и вы, и почувствовать, что запуск вашего собственного контроллера камеры совершенно не нужен.

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; 
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; 
imagePicker.allowsEditing = YES; 
imagePicker.cameraFlashMode = UIImagePickerControllerCameraFlashModeAuto; 
imagePicker.delegate = self; 

[self presentViewController:imagePicker animated:YES completion:^() 
{ 
    for (UIView *subview in imagePicker.view.subviews) 
    { 
     if([NSStringFromClass([subview class]) isEqualToString:@"UINavigationTransitionView"]) 
     { 
      UIView *theView = (UIView *)subview; 

      for (UIView *subview in theView.subviews) 
      { 
       if([NSStringFromClass([subview class]) isEqualToString:@"UIViewControllerWrapperView"]) 
       { 
        UIView *theView = (UIView *)subview; 

        for (UIView *subview in theView.subviews) 
        { 
         if([NSStringFromClass([subview class]) isEqualToString:@"PLCameraView"]) 
         { 
          UIView *theView = (UIView *)subview; 

          for (UIView *subview in theView.subviews) 
          { 
           if([NSStringFromClass([subview class]) isEqualToString:@"CAMTopBar"]) 
           { 
             subview.backgroundColor = [UIColor blackColor]; 
           } 
           if([NSStringFromClass([subview class]) isEqualToString:@"CAMBottomBar"]) 
           { 
             subview.backgroundColor = [UIColor blackColor]; 
           } 
           if([NSStringFromClass([subview class]) isEqualToString:@"PLCropOverlay"]) 
           { 
            UIView *theView = (UIView *)subview; 

            for (UIView *subview in theView.subviews) 
            { 
             if([NSStringFromClass([subview class]) isEqualToString:@"PLCropOverlayBottomBar"]) 
             { 
               UIView *theView = (UIView *)subview; 

               for (UIView *subview in theView.subviews) 
               { 
                if([NSStringFromClass([subview class]) isEqualToString:@"PLCropOverlayPreviewBottomBar"]) 
                { 
                 subview.backgroundColor = [UIColor blackColor]; 
                } 
               } 
              } 
             } 
            } 
           } 
          } 
         } 
       } 
      } 
     } 
    } 
}]; 
+6

Приобретено за избиение записи «вложенные фигурные скобки». – matt

+0

Должен любить это, хотя – klcjr89

+2

Это работает в iOS6? iOS6.1? IOS 7? iOS7.1b1? iOS7.1b2? iOS7.1b3? iOS7.1? iOS7.2? iOS8? –

1

Я не думаю, что вы можете изменить поведение UIImagePickerController. Вероятно, удаление черной полосы из-за недостаточного пространства экрана на меньших экранных устройствах. Если вы настаиваете на этом поведении, вам нужно перейти к пользовательскому методу наложения. Вы устанавливаете showsCameraControls в NO и указываете cameraOverlayView, который будет вести себя так, как вам нужно. Из пользовательского режима наложения, когда пользователь нажимает кнопку, чтобы сделать снимок, вы вызываете takePicture на контроллер выбора изображения.

Вы можете увидеть пример реализации в виде наложения в примерах от Apple: https://developer.apple.com/library/ios/samplecode/PhotoPicker/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010196

+0

Ну, на самом деле это не занимает больше места, потому что на экране справа отображается кнопка «Take Picture». Я просто не хочу, чтобы он был прозрачным - мне нужно каким-то образом сделать его черным непрозрачным. – anthoprotic

+0

Вам нужно будет реализовать наложение. –

+0

У меня уже есть небольшой оверлейный вид с черным фоном над кнопкой «Take Picture». Но если я попытаюсь сделать это, чтобы пойти любовником, он скрывает кнопку. Любой способ сделать его слайдом под кнопкой «Съемка»? – anthoprotic

0

UIImagePickerController является UINavigationController. Бар, на который вы жалуетесь, - это toolbar UINavigationController. Как вы точно знаете, панель инструментов прозрачна (или, по крайней мере, полупрозрачная) по умолчанию на iOS 7.

+0

Hey Matt, в Interface Builder Я установил навигационный контроллер, представляющий мою камеру с помощью «Непрозрачной черной навигационной панели» и «Непрозрачной черной панели инструментов». По-видимому, он работает на iPhone 5, но не на 4S (4 дюйма против 3,5 дюйма). Любое решение? – anthoprotic

+0

Черная полоса в контроллере выбора изображения, точнее контроллер камеры, не является панелью инструментов. –

+0

Но возможно ли изменить цвет/прозрачность? – anthoprotic

Смежные вопросы