shion のアバター画像もくもくログページ一覧ブログ一覧技術メモ一覧ライセンス表記利用規約外部リンクconnpassGitHubSpeaker DeckTwitter[工事中]Shion のもくログバージョン1.2.5

もくもくログ

主にIT 関連のメモをもくもくと綴っていきます

最終更新日:2021/04/10 08:45:522021/04/03 ~ 2021/04/09 のもくもく日記活動記録

もくもく 前回までは

2021/03/27 ~ 2021/04/02 のもくもく日記 をご覧ください。

今回の目標

  • 全体的な環境整備

    → さっとコード書きたいものがあるのだけど、あれもこれもやらなきゃってなって、結局何も進んでないのでw

途中経過

その1

標準のビデオ撮影機能の呼び出しは、こんな感じで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
    }
}

その2

生体認証ダイアログを表示する を見ながら、Android で生体認証を利用する実装を試してみたけど、いまいちうまく実装できているか分らんw

今回の成果

関連リンク

参考文献

Active なGitHub リポジトリ

一覧に戻る