2016-02-29 2 views
1

Я пытаюсь создать пользовательский вид камеры, в основном. Я застрял, меняя размер изображения в UIImagePicker. По представлению изображения я имею в виду окно, отображающее вид камеры. Надеюсь, это будет более ясно из картины. Это вид внутри этого красного квадрата (я рисовал этот красный квадрат вручную, чтобы показать вам, не думаю, что это код).Пользовательский просмотр камеры - Невозможно изменить размер рамки камерыLayout UIImagePicker, Swift

sample camera view

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

@IBAction func takePhoto(sender: UIButton) { 
    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera){ 
     imagePicker = UIImagePickerController() 
     imagePicker.delegate = self 
     imagePicker.sourceType = .Camera 
     imagePicker.allowsEditing = false 
     imagePicker.showsCameraControls = false 

     //Create view 
     let customViewController = CustomCameraViewController(
      nibName:"CustomCameraViewController", 
      bundle: nil 
     ) 
     let customView:CustomCameraView = customViewController.view as! CustomCameraView 

     //Assignments 
     customView.frame = self.imagePicker.view.frame 
     customView.delegate = self 
     self.imagePicker.cameraOverlayView?.frame.size = customView.image.frame.size 

     presentViewController(imagePicker, 
      animated: true, 
      completion: { 
       self.imagePicker.cameraOverlayView = customView 
      } 
     ) 
    }else{ 
     //Alert 
     let alert = UIAlertController(title: "Üzgünüz, kameranızı açamadık!", message: "Telefonunuz kamerayı desteklemiyor veya açmamıza izin verilmemiş. İzin vermek isterseniz ayarlardan izni açabilirsiniz.", preferredStyle: UIAlertControllerStyle.Alert) 

     //Creating actions 
     let okAction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default){ 
      UIAlertAction in 
      NSLog("OK is Pressed. Proceeding...") 
     } 

     //Adding actions 
     alert.addAction(okAction) 

     //Display alert 
     self.presentViewController(alert, animated: true, completion: nil) 
    } 
} 

Я пытаюсь выполнить весь пользовательский вид вещь из файла XIb, и это связано с классом CustomCameraView. Я настроил два метода делегата на CustomCameraView, способный использовать их, но это не обязательно для этого вопроса, поэтому я не буду размещать код, но все же думаю, что вам, возможно, понадобится знать. Что связано с вопросом является файл XIB, пожалуйста, найти его ниже:

CustomCameraViewController.xib file

Кнопки обнаруживаются в том, где они должны быть, однако я не могу использовать этот ImageView. Я создал представление изображения здесь, так что я могу взять его frame.size и установить в frame.size сборщика (вы можете увидеть это в моем списке кодов). И из coruse ссылка на это изображение выглядит в классе CustomCameraView, поэтому я достигаю этого класса, как вы могли заметить.

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

Я был бы очень признателен, если вы можете мне помочь. Дайте мне знать, если вам нужна дополнительная информация.

Спасибо!

+0

Вы должны установить CameraViewTransform изображения, чтобы получить его в нужном вам положении/масштабе. Камера имеет собственное соотношение сторон для разных режимов (фото/видео) и, таким образом, устойчива к тому, что ее можно установить только на какое-то произвольное значение. – beyowulf

+0

Спасибо за ваш комментарий. Можете ли вы дать мне небольшой пример использования cameraViewTransform? Я был бы признателен, и если вы сделаете это, сделайте это как ответ, чтобы его было легче увидеть. –

ответ

4

Не знаю, как вы хотите изменить рамку cameraView, но вы можете сказать что-то вроде следующего, чтобы переместить точку зрения на 100 пунктов вниз экрана:

if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera){ 
      imagePicker = UIImagePickerController() 
      imagePicker.delegate = self 
      imagePicker.sourceType = .Camera 
      imagePicker.allowsEditing = false 
      imagePicker.showsCameraControls = false 

      //Create view 
      let customViewController = CustomCameraViewController(
       nibName:"CustomCameraViewController", 
       bundle: nil 
      ) 
      let customView:CustomCameraView = customViewController.view as! CustomCameraView 

      //Assignments 
      customView.frame = self.imagePicker.view.frame 
      customView.delegate = self 
      imagePicker.cameraOverlayView = customView 
      //adjust the cameraView's position 
      imagePicker.cameraViewTransform = CGAffineTransformMakeTranslation(0.0, 100.0); 

      presentViewController(imagePicker, 
       animated: true, 
       completion: { 
       } 
      ) 
     } 

Если вы хотите масштабировать cameraView к возьмите больше экрана, который вы можете сказать CGAffineTransformMakeScale (scaleX, scaleY), но затем вам нужно обрезать полученное изображение, чтобы оно соответствовало тому, что было показано пользователю.

+0

Спасибо за ваше время. Этот ответ действительно помог мне понять этот процесс. Поэтому я предполагаю, что я, вероятно, использую как CGAffineTransformMakeTranslation, так и CGAffineTransformMakeScale. Я действительно старался масштабироваться, и он уменьшал размер, как я хотел. Просто быстрый вопрос, если вы позволите мне. Когда я уменьшаю масштаб, на самом деле пользователь видит меньше, но он принимает фотографию такого же размера, как и раньше, верно? –

+0

Да. Вы только масштабируете предварительный просмотр, а не фактическое изображение. – beyowulf

+0

Большое спасибо! –

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