2016-04-18 2 views
2

Я экспериментирую на ролике камеры, используя UIImagePickerController. Я добился представления камеры с помощью пользовательских кнопок (и для этого я использовал другой ViewController с xib (CustomOverlayVC.swift)). Поэтому у меня есть:CameraRoll Square Display и Circular Mask - UIImagePickerController

  • MainViewController.swift (+ раскадровка)

  • CustomOverlayViewController.swift

  • CustomOverlayView.swift (UIView)

full code below


После создания NavBar программно на CustomOverlayVC, это то, что она выглядит до сих пор (а также то, что я хочу достичь на праве)

enter image description hereenter image description here


Так что мои проблемы:

1) Как я могу сузить вид изображения, как и второе изображение (хорошо отображаемое, как изображение в квадратном формате?)

Я попробовал picker.view.frame.height -= 40, но, видимо, это только свойство.

2) Как я могу получить маску над изображением, которое покажет круговую маску? (Это объясняется для Objective-C here, но я не знаю ни одного Obj-C и не может преобразовать его успешно Swift)

enter image description here

3) Я пытался дать ему собственный фон цвет с picker.view.backgroundColor = UIColor.redColor() однако, он не работает вообще. Чтобы очистить, во втором примере он имеет сероватый цвет фона.

4) Кроме того, Navbar, что я создал выглядит гораздо шире, даже если я использовал, (я знаю, что это другой вопрос, но, это решило бы весьма признателен)

UINavigationBar(frame: CGRectMake(0, 0, self.view.frame.size.width, 44)) 

Чтобы обернуть, я хочу сузить высоту своего вида, пока он не станет квадратным (а также снимать квадрат) (2-е изображение), а также в то же время иметь круговую маску и greyed вне круга (последний снимок)

Я создал sample project, а также полный код ниже ..


ViewController.скор

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 

var picker = UIImagePickerController() 


@IBAction func shootCamera(sender: AnyObject) { 

    if UIImagePickerController.availableCaptureModesForCameraDevice(.Rear) != nil { 
     picker = UIImagePickerController() //make a clean controller 
     picker.allowsEditing = false 
     picker.sourceType = UIImagePickerControllerSourceType.Camera 
     picker.cameraDevice = .Front 
     picker.cameraCaptureMode = .Photo 
     picker.showsCameraControls = false 

     picker.delegate = self 

     let customViewController = CameraCustomOverlayViewController(nibName:"CameraCustomOverlayViewController",bundle: nil) 
     let customView:CameraCustomOverlayView = customViewController.view as! CameraCustomOverlayView 
     customView.frame = self.picker.view.frame 

     picker.modalPresentationStyle = .FullScreen 
     presentViewController(picker,animated: true,completion: { 
      self.picker.cameraOverlayView = customView 
     }) 

    } else { //no camera found -- alert the user. 
     let alertVC = UIAlertController(
      title: "No Camera", 
      message: "Sorry, this device has no camera", 
      preferredStyle: .Alert) 
     let okAction = UIAlertAction(
      title: "OK", 
      style:.Default, 
      handler: nil) 
     alertVC.addAction(okAction) 
     presentViewController(
      alertVC, 
      animated: true, 
      completion: nil) 
    } 
} 

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 
    let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage //2 
    UIImageWriteToSavedPhotosAlbum(chosenImage, self,nil, nil) 
} 

//What to do if the image picker cancels. 
func imagePickerControllerDidCancel(picker: UIImagePickerController) { 
    dismissViewControllerAnimated(true, completion: nil) 
} 

CustomOverlayVC.swift (для NavBar)

class CameraCustomOverlayViewController: UIViewController, UINavigationBarDelegate { 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let navigationBar = UINavigationBar(frame: CGRectMake(0, 0, self.view.frame.size.width, 44)) 
    navigationBar.backgroundColor = UIColor.blackColor() 
    navigationBar.delegate = self; 
    let navigationItem = UINavigationItem() 
    navigationItem.title = "CAMERAROLL" 
    let leftButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Plain, target: self, action: #selector(CameraCustomOverlayViewController.btn_clicked(_:))) 
    let rightButton = UIBarButtonItem(title: "Save", style: UIBarButtonItemStyle.Plain, target: self, action: nil) 
    navigationItem.leftBarButtonItem = leftButton 
    navigationItem.rightBarButtonItem = rightButton 
    navigationBar.items = [navigationItem] 
    self.view.addSubview(navigationBar) 
    } 
} 

Edit:

Для понимания высоты, я попробовал, добавив цветную границу, она охватывает весь взгляд, а не взгляд ImagePicker на меня ... Я не мог найти способ решить это ..

picker.view.layer.borderWidth = 1 
    picker.view.layer.borderColor = UIColor.redColor().CGColor 

enter image description here

ответ

1

я переехал из UIImagePickerController в AVFoundation подхода для достижения более специализированной Фотопленка

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

  • Нет связанных вопросов^_^