質問: v as? UILabel where v.tag <= 10 { // そのオブジェクトを親のviewから取り除く v.removeFromSuperview() } } }
回答: アニメーションの停止は、アニメーションしているビューのレイヤーに対してremoveAllAnimations()を呼び出すことでできます。 (参考) なお、アニメーション処理が途中でキャンセルされるとアニメーション完了時(completionハンドラ)のfinishedパラメータがfalseで呼び出されます。 提示されたソースコードの修正ポイントを具体的に言うと、 1. labelRemove()関数で `v.removeFromSuperView()`する直前に`v.layer.removeAllAnimations()`を入れてアニメーションを削除する。 2. アニメーション処理の各completionハンドラの処理でfinishedパラメータを参照し、finishedがfalseであれば続きのアニメーションを開始しないようにする。 これでうまくいくと思います。