2015-09-24 3 views
1

Я использую UIImagePickerController с типом CameraSource. но я замечаю, что есть квадратный обрезчик вместо круговой обрезки с «перемещением и масштабированием»Циркулярная камера Cropper с UIImagePickerController iOS?

В приложении для контактов iOS есть круговой обрезчик с названием «Перемещение и масштабирование». Но я использую UIImagePickerController с типом источника камеры. Я получил квадратную рамку без заголовка.

Пожалуйста, предложить некоторые библиотеки или код

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

Благодаря

+0

Вы попробовали это: http://stackoverflow.com/questions/9362712/uiimagepickercontroller-crops-picture-to-square-in-portrait? –

+0

@ Mr.T Спасибо за ответ. Позвольте мне проверить это. – user100

+0

@ Mr.T Эта библиотека не работает с камерой. просто показывая камеру и культуру по умолчанию. Пожалуйста, предложите мне показать круговой обрезку после захвата фотографии, например, iPhone-приложения для контактов с iPhone. спасибо – user100

ответ

3

Я покажу, как я это сделал.

Я создал контроллер вида (PhotoPicker), чтобы делать снимки с помощью камеры и обрезать их своим круговым слоем. Он содержит панель инструментов внизу с кнопками возврата и выполнения и изображение в виде прокрутки (см. Снимок экрана моего фотопленка здесь: http://imgur.com/MleuKmh).

Когда я хочу, чтобы сделать снимок, когда я открываю мой PhotoPicker с этим кодом:

let photoPickerVC=self.storyboard?.instantiateViewControllerWithIdentifier("photoPickerVC") as! PhotoPicker 
photoPickerVC.modalPresentationStyle=UIModalPresentationStyle.OverFullScreen 
self.presentViewController(photoPickerVC, animated: true, completion: nil) 

Мой класс PhotoPicker потребуется UIImagePickerControllerDelegate, чтобы сделать снимок.

Я вызываю эту функцию в viewDidLoad для создания урожая.

func addCropLayer(){ 
     //layer circle 
     let circleLayer=CAShapeLayer() 
     let squareLength=self.view.frame.width - 40 
     innerrect=CGRectMake(20, self.view.center.y - (squareLength/2) - self.toolBar.frame.height, squareLength, squareLength) 
     let path2=UIBezierPath(ovalInRect: innerrect) 
     path2.usesEvenOddFillRule=true 
     circleLayer.path=path2.CGPath 
     circleLayer.fillColor=UIColor.clearColor().CGColor 

     let path=UIBezierPath(roundedRect: CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height - toolBar.frame.height), cornerRadius: 0) 
     path.appendPath(path2) 
     path.usesEvenOddFillRule=true 

     //black layer that contains the transparent circle 
     //var fillLayer=CAShapeLayer() 
     fillLayer.path=path.CGPath 
     fillLayer.fillRule=kCAFillRuleEvenOdd 
     fillLayer.fillColor=UIColor.blackColor().CGColor 
     fillLayer.opacity=0.8 

     self.view.layer.addSublayer(fillLayer) 
     self.view.addSubview(toolBar) 
    } 

Тогда я называю ImagePicker в viewDidAppear:

override func viewDidAppear(animated: Bool) { 
    self.showImagePickerForSourceType(UIImagePickerControllerSourceType.Camera) 
} 

func showImagePickerForSourceType(sourceType: UIImagePickerControllerSourceType){ 
     print("showImagePickerForSourceType") 
     if self.imageView.isAnimating(){ 
      self.imageView.stopAnimating() 
     } 
     //var capturedImages=NSMutableArray() 
     if self.capturedImages.count>0 { 
      self.capturedImages.removeAllObjects() 
     } 

     let imagePickerController=UIImagePickerController() 
     imagePickerController.modalPresentationStyle=UIModalPresentationStyle.CurrentContext 
     imagePickerController.sourceType=sourceType 
     imagePickerController.delegate=self 
     imagePickerController.cameraDevice=UIImagePickerControllerCameraDevice.Front 

     if sourceType == UIImagePickerControllerSourceType.Camera { 
      imagePickerController.showsCameraControls=false 
      NSBundle.mainBundle().loadNibNamed("OverlayVC", owner: self, options: nil) 
      self.overlayView.frame=UIScreen.mainScreen().bounds 
      imagePickerController.cameraOverlayView=self.overlayView 
      self.overlayView=nil 
     } 

     print("presentviewcontroller") 
     self.imagePickerController=imagePickerController 

     let screenSize:CGSize=UIScreen.mainScreen().bounds.size 
     let cameraAspectRatio:CGFloat=3.0/4.0 
     print("camera aspect ratio: \(cameraAspectRatio)") 
     let scale=(screenSize.height/screenSize.width) * cameraAspectRatio 
     print("scale: \(scale)") 
     let yOffset=(screenSize.height - screenSize.width/cameraAspectRatio)/2 
     print("y offset: \(yOffset)") 
     let translate:CGAffineTransform=CGAffineTransformMakeTranslation(0, yOffset) 
     let fullScreen:CGAffineTransform=CGAffineTransformMakeScale(scale, scale) 
     let fullTransform:CGAffineTransform=CGAffineTransformConcat(fullScreen, translate) 
     self.imagePickerController.cameraViewTransform=fullTransform 

     let iOS:NSString=UIDevice.currentDevice().systemVersion 
     let iOSint:Int=iOS.integerValue 
     print("iOS int value: \(iOSint)") 

     if iOSint < 8 { 
      print("ios < 8") 
      var rect:CGRect=self.imagePickerController.view.frame 
      rect.size.height = screenSize.width/cameraAspectRatio 
      rect.size.width = screenSize.width 
      print("rect: \(rect)") 
      self.imagePickerController.view.frame=rect 
      self.imagePickerController.view.transform=fullTransform 
     }else{ 
      self.imagePickerController.view.frame=UIScreen.mainScreen().bounds 
     } 

     self.presentViewController(self.imagePickerController, animated: true, completion: nil) 
    } 


@IBAction func takePhoto(sender: AnyObject) { 
     print("takePhoto") 
     self.imagePickerController.takePicture() 
    } 

Как вы можете видеть, что я называю OverlayVC, когда я показываю ImagePicker. Это другое представление, которое я создал, см. Скриншот здесь: http://imgur.com/6nr4PNW. Но его выходы также подключены к PhotoPicker. Не создавайте другой класс, просто вид в раскадровке и кнопки подключения & co к классу PhotoPicker.

+0

спасибо за ваш ответ. но я не мог понять. и я использую objectivec в своем коде. Пожалуйста, напишите дополнительную документацию. – user100

+0

Вам необходимо создать контроллер вида в раскадровке (PhotoPicker) и другой файл xib (Overlay), который является представлением. Оба связаны с классом (PhotoPicker.swift), где у вас есть код, который я вам дал, что позволяет вам снимать и обрезать фотографию. Но я сожалею, что не могу дать вам код в Obj-C. –

+0

спасибо. Когда я на экране захвата камеры. Он не показывал захват изображения на весь экран, например, приложение для подключения к контактам iOS. Посмотрите на это http://stackoverflow.com/questions/32822246/uiimagepickercontroller-camera-full-screen-capture-photo/ 32822476 # 32822476 – user100

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