ryonamasteの日記

主に自身が学んだIT関連の技術情報をまとめています。

Swift3.1でtupleがエラーになった。

 

Swift3.1がリリースされましたね!

私もさっそくUpdateしたところ、いくつかエラーがでていました。

f:id:ryonamaste:20170330070958p:plain

エラーメッセージをみると

Expression type '(hoge: Double)' is ambiguous without more context

とでているのですが、3.1からはtuple内の値が一つしかない場合は値に名前をつけれなくなったようですね。

(そもそも一つしかないんだから、変数名で表現しろよとか、一つしかないんだから、tupleじゃないじゃんという感じですが・・・)

 

直すには名前を削除すればいいようですね。

f:id:ryonamaste:20170330071046p:plain

やはり昔書いたコードはおかしな部分があるので、定期的にリファクタリングしないとだめだなと思いました。

Swiftで画像を点滅させる方法2

年が明けてからだいぶ空いてしまいましたが、本年もよろしくお願いします。

前回の記事(相当前ですが・・・笑)で書いた画像を点滅させる方法ですが、その後UIBView.animateの引数にoptionsがあり、sが付いているので複数指定できるじゃん!と気付き、修正しました。 サンプルコードはUIImageViewですが、UIButton等でも同じようにいけるはずです。

class ViewController: UIViewController {
    @IBOutlet weak var imageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // アニメーションの開始
        self.startAnimation()
    }

    private func startAnimation() {
       // 2秒かけて透明にし、完了したら2秒かけて元に戻す。
       UIView.animate(withDuration: 2.0,
                       delay: 0.0,
                       options: [.repeat,.autoreverse],
                       animations: { _ in
                                    self.imageView.alpha = 0.0
            }, completion: nil)
    }

    @IBAction func pushStopButton(_ sender: AnyObject) {
        // ボタンが押されたらアニメーションを停止する。
        imageView.layer.removeAllAnimations()
    }
}

以前のコードよりだいぶスッキリ書けたと思います! やっぱコードは読みやすいのが一番ですよね。 同じような悩みに直面した方の助けになれば幸いです。

Swiftで画像を点滅させる方法

自作アプリの開発をしていた際に、画像を点滅させたかったのでやってみました。
最初はOptionsにrepeatを指定していたのですが、消えたあといきなりalpha=1.0に戻ってしまうので、以下のコードで実装しました。

class ViewController: UIViewController {
    @IBOutlet weak var imageView: UIImageView!

    private var _stopAnimation = false
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // アニメーションの開始
        self.startAnimation()
    }
    
    private func startAnimation() {
        if _stopAnimation {
            return
        }
        
        // 2秒かけて透明にし、完了したら2秒かけて元に戻す。
        UIView.animate(withDuration: 2.0,
                       delay: 0.0,
                       animations: { _ in
                        self.imageView.alpha = 0.0
            }, completion: { _ in UIView.animate(withDuration: 2.0,
                                                 delay: 0.0,
                                                 animations: { _ in
                                                    self.imageView.alpha = 1.0
                }, completion: { _ in self.startAnimation() })})
    }
    

    @IBAction func pushStopButton(_ sender: AnyObject) {
        // ボタンが押されたらアニメーションを停止する。
        _stopAnimation = true
    }
}

アニメーションを停止させたいのですが、うまいこと止まらなかったので、stopボタンが押されたら停止用の変数をtrueにしています。
何かいい方法はないものでしょうか・・・

Xcodeでよく使うショートカットまとめ

Xcode(8.0)でよく使うショートカット一覧をまとめてみました。
Xcode8.0からはドキュメンテーションの追加ができるようになっているようですね。

ビルド

  • Command + B
    ビルド

  • Command + R
    ラン

編集

  • Command + Ctrl + ←
    前のカーソル位置へ戻る

  • Command + Ctrl + →
    次のカーソル位置へ進む

  • Command + Ctrl + J
    定義に飛ぶ

  • Command + Shift + →
    行の最後まで選択

  • Shift + Option + →/←
    単語区切りで選択

  • Option + →/←
    単語区切りで移動

  • Command + F
    ファイル内検索

  • Command + Shift + F
    workspace内検索

  • Command + Shift + O
    ファイル、メソッド等の横断検索

  • Command + /
    コメントアウト

  • Command + Control + E
    スコープ内を変更

  • Command + Option + /
    ドキュメンテーションの追加

デバッグ

  • F6
    ステップオーバー

  • F7
    ステップイン

  • F8
    ステップアウト