[Swift] UIView.animate가 호출되자마자 끝나버린다면?

아니 repeat 옵션 줬는데 왜 바로 completionBlock에 들어가버리는데요;

naljin
3 min readSep 15, 2020

문제 상황

UIView.animate 옵션에 repeat 를 설정하면 따로 멈출일을 만들지 않는 이상 completion block에 안들어간다고 알았다. 실제로 안들어가는것도 확인했고 말이지.

근데 새로운 ViewController를 호출하고 거기서(viewWillAppear) UIView.animate를 시킬일이 또 있었는데 갑자기 겁나 빨리 completion block에 들어가버리는거임?!

프린트로 확인한 순서는 이러하다 ㅇㅇ

viewWillAppear //appear 될 것이고..Animation Block //내가 viewWillAppear에서 호출했으니까 여기 들어오고..viewDidAppear //appear 되었고..Completion Block //띠용😯 repeat 옵션 줬는데 왜 completion 들어감;;;

해결

굉장히 많은 삽질이 있었지만 내 경우에 문제는 Animate를 너무 빨리 호출했기 때문. 무려 viewWillAppear에서..!ㅠㅠ

아래 링크에 따르면 viewWillAppear에서 Autolayout constraints은 제대로 세팅되지 않은 상태라고 한다. viewWillAppear 🔜 viewWillLayoutSubviews 🔜 viewDidLayoutSubviews이 constraint를 만족시키기 위해 위해 차례대로 호출되는데, 따라서 그 다음으로 불리는 viewDidAppear에서야 constraint가 잘 세팅되어 있을 것이라고.. ㅎㅎ

따라서 Animation을 수행하기 위해선 적어도 viewDidAppear 에서 하자

참고

--

--

Responses (1)