もくもくログ
主にIT 関連のメモをもくもくと綴っていきます
2021/03/27 ~ 2021/04/02 のもくもく日記 をご覧ください。
標準のビデオ撮影機能の呼び出しは、こんな感じでViewController を作って、present する感じだった
今回は権限周りをいじらなくてもいけたけど、本当は調整がいるはずなので、後で設定を調べてみよっと
let camera = UIImagePickerController.SourceType.camera
let nextPage = UIImagePickerController()
nextPage.mediaType = ["public.movie"]
nextPage.sourceType = camera
……で、実装を進めて分かったのだけど、UIImagePickerController って継承しちゃダメっぽい。
https://developer.apple.com/documentation/uikit/uiimagepickercontroller
しょうがないのでBuilder にしてみたけど、利用頻度低いよね……。
import UIKit
/**
UIImagePickerController に設定を追加してからインスタンス生成するためのビルダー
*/
class UIImagePickerControllerBuilder {
typealias PickDelegate = (UIImagePickerControllerDelegate & UINavigationControllerDelegate)
private static let mediaMovie = "public.movie"
private weak var _delegate: PickDelegate?
public weak var delegate: PickDelegate? {
return _delegate
}
public private(set) var mediaTypes = Set<String>()
public private(set) var sourceType: UIImagePickerController.SourceType?
func appendMediaFilterMovie() -> UIImagePickerControllerBuilder {
mediaTypes.insert(UIImagePickerControllerBuilder.mediaMovie)
return self
}
func build() -> UIImagePickerController? {
guard let type = sourceType, UIImagePickerController.isSourceTypeAvailable(type) else {
return nil
}
let vc = UIImagePickerController()
vc.delegate = delegate
if !mediaTypes.isEmpty {
vc.mediaTypes = Array(mediaTypes)
}
vc.sourceType = type
return vc
}
func clearMediaFilter() -> UIImagePickerControllerBuilder {
mediaTypes.removeAll()
return self
}
func removeMediaFilterMovie() -> UIImagePickerControllerBuilder {
mediaTypes.remove(UIImagePickerControllerBuilder.mediaMovie)
return self
}
func setDelegate(_ value: PickDelegate?) -> UIImagePickerControllerBuilder {
_delegate = value
return self
}
func setSourceType(_ value: UIImagePickerController.SourceType?) -> UIImagePickerControllerBuilder {
sourceType = value
return self
}
}
生体認証ダイアログを表示する を見ながら、Android で生体認証を利用する実装を試してみたけど、いまいちうまく実装できているか分らんw