今回は”CropViewController”というライブラリを使用します。
Storyboard
ライブラリ導入
pod 'CropViewController'
コード記述
import UIKit
import CropViewController
class ViewController: UIViewController {
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
}
//アルバムを開く
private func setImagePicker(){
let picker = UIImagePickerController()
picker.sourceType = .photoLibrary
picker.delegate = self
present(picker, animated: true, completion: nil)
}
@IBAction func trimImageAction(_ sender: Any) {
setImagePicker()
}
}
extension ViewController: CropViewControllerDelegate {
func cropViewController(_ cropViewController: CropViewController, didCropToImage image: UIImage, withRect cropRect: CGRect, angle: Int) {
updateImageViewWithImage(image, fromCropViewController: cropViewController)
}
//加工画面を閉じて画像を表示する
func updateImageViewWithImage(_ image: UIImage, fromCropViewController cropViewController: CropViewController) {
imageView.image = image
cropViewController.dismiss(animated: true, completion: nil)
}
}
extension ViewController: UINavigationControllerDelegate, UIImagePickerControllerDelegate {
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
guard let pickerImage = (info[UIImagePickerController.InfoKey.originalImage] as? UIImage) else { return }
//CropViewControllerを初期化する。pickerImageを指定する。
let cropController = CropViewController(croppingStyle: .default, image: pickerImage)
cropController.delegate = self
//AspectRatioのサイズをimageViewのサイズに合わせる。
cropController.customAspectRatio = imageView.frame.size
//今回は使わない、余計なボタン等を非表示にする。
// cropController.aspectRatioPickerButtonHidden = true
// cropController.resetAspectRatioEnabled = false
// cropController.rotateButtonsHidden = true
//cropBoxのサイズを固定する。
cropController.cropView.cropBoxResizeEnabled = false
//pickerを閉じたら、cropControllerを表示する。
picker.dismiss(animated: true) {
self.present(cropController, animated: true, completion: nil)
}
}
}
これでボタンを押した時にアルバムから写真を選んでトリミング加工が可能となります、シンプルで便利ですね。