📱MisocaアプリのiPhone X対応

mzpです。こんにちは。

MisocaのiPhoneアプリiPhone Xに対応しました。

🎨 デザイン変更

単純に最新のXcodeでビルドしなおしてみたが、iPhone Xのホームインジケータとボタンが被ってしまった。

f:id:mzp:20171116135049p:plain:w200

こういった画面はデザインを変更し、ボタンの下に余白を設けた。

f:id:mzp:20171116135803p:plain:w250

同様の位置にボタンがある画面がいくつかあったので、それらの画面も修正した。

📝更新通知画面

今回のバージョンから以下のような更新内容を通知する画面を導入した。

f:id:mzp:20171116140943p:plain:w250

実機で動かしてみたら、想像以上に格好よくて楽しかった。この写真のときは不具合修正のところに虫のピクトグラムを表示していたが、虫が気持ち悪いと言われたのでリリース版では魔法の杖に変えた。

f:id:mzp:20171115110809j:plain:w400

この画面を表示するかどうかの判断は以下のようにしている。前回起動したときとバージョンが異なっている場合は、この画面を出すようにした。

enum UpdateType {
    case initial
    case update
    case normal
}

class UpdateInfo {
    private let key = "latest_version"

    func requestUpdateType(f: (UpdateType) -> Void) {
        if !Auth.isLoggedIn() {
            // 未ログイン状態なら初期画面を表示する
            UserDefaults.standard.set(currentVersion, forKey: key)
            f(.initial)
            return
        }

        if currentVersion == previosVersion {
            // 前回起動したときと同じバージョンなら通常処理をする
            f(.normal)
        } else {
            // 前回起動したときと違うバージョンなら更新通知画面を出す
            UserDefaults.standard.set(currentVersion, forKey: key)
            f(.update)
        }
    }

    private lazy var currentVersion: String? = {
        guard let shortVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String else {
            return nil
        }
        guard let version = Bundle.main.infoDictionary?["CFBundleVersion"] as? String else {
            return nil
        }
        return "\(shortVersion)-\(version)"
    }()

    private lazy var previosVersion: String = {
        return UserDefaults.standard.string(forKey: key) ?? ""
    }()
}

👈文書ボタンの長押し

文書作成ボタンやタブバーを長押しすると、作成する文書の種類を選べるようにした。

f:id:mzp:20171116151905j:plain:w250

これは UILongPressGestureRecognizer で実現している。

let view = navigationItem.rightBarButtonItem?.value(forKey: "view") as? UIView
view?.addGestureRecognizer(
  UILongPressGestureRecognizer(target: self, 
                               action: #selector(DocumentsViewController.addLongpressAction(_:))))

📢採用

MisocaではiPhoneアプリ開発に携わりたいエンジニアを募集中です。