ひとりまとめ

もろもろのメモ

UIViewをアニメーションしてる時にUILabelを更新するとアニメが止まる

ひたすら謎でした。しかし、なんとか解決したのでメモ。
 

現象

まず、発生した時の状況から説明。
・Storyboardを使って、同一画面上にUIImageViewとUILabelを配置する。
・UIImageViewを、animateWithDuration: animations:を使ってアニメーションさせる。
・その最中、UILavelのtextを更新する。

最後の「UILavelのtextを更新」を行った瞬間、画面上で動いていたUIImageViewのアニメーションが止まるのです。座標移動をしていたら間をすっ飛ばしてワープ。まさにキングクリムゾン。

挙動は、ちょうどremoveAllAnimationsを使って止めたときのようでした。
 

解決方法

画面上に新たなViewを配置して、UILabelはそのViewの上(中?)に入れる。

こうすることで、UILabelを更新してもアニメーションは止まらなくなりました。
removeAllAnimationsの時と似ていたので、View全体で強制再描画みたいなことになってるのかなーと思って、Viewを別に分けてみたところ回避できました。
そもそもこんな風に同一View上にオブジェクトを配置すべきではないのか、あるいはそういうモノなのかはわからず仕舞。。

取り急ぎなんとかなったような気がする という備忘録でした。


こちらの本をポチってしまいました。この現象については書かれてませんが、「あー、こういう場面あるある」というのが100個も載っていて、とってもいい感じ。活用させていただきます!