Как добавить любое пользовательское изображение на экране камеры во время захвата изображения?

Я хочу добавить кастом UIImage на экране камеры, пока пользователь снимает фотографию. Также я хочу, чтобы это изображение было на переднем плане этого захваченного изображения в той же позиции, в которую добавлено изображение.
Здесь демонстрационное изображение, которое объясняет, что я хочу.
Чтобы обойти это у меня есть попытка

let picker = UIImagePickerController()
picker.sourceType = .Camera
picker.view.addSubView(imageView) 

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

Любая помощь приветствуется.

2 ответа

Ты можешь использовать UIImagePickerController"s cameraOverlayView свойство добавить imageView в верхней части экрана камеры:

let picker = UIImagePickerController()
picker.delegate = self
picker.sourceType = .Camera
picker.cameraOverlayView = imageView

presentViewController(picker, animated: true, completion: nil)

Для добавления изображения на передний план захваченного фото вы можете создать расширение для UIImage:

extension UIImage {
  func imageWithOverlayImage(overlayImage: UIImage) -> UIImage {
    let imageRect = CGRectMake(0, 0, self.size.width, self.size.height)

    UIGraphicsBeginImageContext(self.size)

    self.drawInRect(imageRect)
    overlayImage.drawInRect(imageRect)

    let resultImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return resultImage
  }
}

Затем вы можете вызвать его из метода делегата средства выбора изображений:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
  let image = info[UIImagePickerControllerOriginalImage] as! UIImage
  finalImage = image.imageWithOverlayImage(overlayImage!)
  dismissViewControllerAnimated(true, completion: nil)
}

Попробуйте поставить Overlayview. добавить пользовательское изображение в оверлей.

func openCamera(){

        let pickercontroller : UIImagePickerController = UIImagePickerController()
        pickercontroller.delegate = self

        if(UIImagePickerController .isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera)){

            pickercontroller.sourceType = UIImagePickerControllerSourceType.Camera
        }
        else{
        }

        pickercontroller.editing = false
        pickercontroller.showsCameraControls = false
        let graphRect:CGRect = CGRectMake(0, 0,pickercontroller.view.frame.size.width-20 ,pickercontroller.view.frame.size.height)

        let overlayView : UIView = UIView(frame: graphRect)
        overlayView.backgroundColor = UIColor(colorLiteralRed: 0.0/255.0, green: 0/255.0, blue: 0.0/255.0, alpha: 0.5)
        overlayView.layer.opaque = false
        overlayView.opaque = false

        var maskLayer : CAShapeLayer = CAShapeLayer()
        overlayView.layer.mask = maskLayer
      }
Другие вопросы по тегам