今日は、Swift
や Objective-C
で画像をトリミングする際に非常に有名なライブラリ、CropViewController
を使ってみたいと思います📱
Swift
標準の UIImagePickerController
クラスでもallowsEditing
を true
にすることで、画像選択後にトリミングをすることはできるんですが、スクエアしかサポートされていないので異なるアスペクト比で画像をトリミングすることができません😢 (もし、標準でできるものがあれば是非教えてください)
ということで CropViewController
を使ってみます。
それではやっていく
今回は SPM(Swift Package Manager)
で導入していくので、まずは依存関係を追加します。
File > Swift Packages > Add Package Dependency
を選択します。プロジェクトを選択後に https://github.com/TimOliver/TOCropViewController.git を入力し、リポジトリを探します。
表示された依存関係を追加します。
インストールが完了したので実際に使ってみます。
デフォルトだと左側の画像のようになります。今回はアスペクト比の指定のみできれば良かったので、他のボタンは非表示に設定しています。また、aspectRatioPreset
を設定することでデフォルトのアスペクト比を設定することができるようです。
デフォルト | カスタム |
---|---|
![]() |
![]() |
let cropViewController = CropViewController(image: result.image) cropViewController.delegate = self cropViewController.aspectRatioPreset = .preset16x9 cropViewController.rotateButtonsHidden = true cropViewController.cancelButtonTitle = "キャンセル" cropViewController.doneButtonTitle = "完了" cropViewController.children.first?.modalTransitionStyle = .coverVertical self?.present(cropViewController, animated: true, completion: nil)
ちなみにこの設定は、CropViewController
を閉じる時に元の画面が見えなくなってしまう問題を修正するために modalTransitionStyle
を .coverVertical
にしています 🤔 スタックオーバーフローにも同様の問題があったのでリンクも載せておきます。
cropViewController.children.first?.modalTransitionStyle = .coverVertical
という感じで今日は以上になります。それではまた明日🦅
参考
- https://github.com/TimOliver/TOCropViewController
- https://developer.apple.com/documentation/uikit/uiimagepickercontroller/1619137-allowsediting