Я экспериментирую на ролике камеры, используя UIImagePickerController. Я добился представления камеры с помощью пользовательских кнопок (и для этого я использовал другой ViewController с xib (CustomOverlayVC.swift)). Поэтому у меня есть:CameraRoll Square Display и Circular Mask - UIImagePickerController
MainViewController.swift (+ раскадровка)
CustomOverlayViewController.swift
CustomOverlayView.swift (UIView)
full code below
После создания NavBar программно на CustomOverlayVC, это то, что она выглядит до сих пор (а также то, что я хочу достичь на праве)
Так что мои проблемы:
1) Как я могу сузить вид изображения, как и второе изображение (хорошо отображаемое, как изображение в квадратном формате?)
Я попробовал picker.view.frame.height -= 40
, но, видимо, это только свойство.
2) Как я могу получить маску над изображением, которое покажет круговую маску? (Это объясняется для Objective-C here, но я не знаю ни одного Obj-C и не может преобразовать его успешно Swift)
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