質問: 現在、アプリの起動直後にボタンが回転するというアニメーションを 考えています。 少々説明が難しいのですが、質問させていただきます。 質問内容は下記の通りです。 ■質問内容 selectorを使ってviewDidAppear内のメソッドを呼び出すには どのようなコーディングをすべきでしょうか。 はじめは、下記の様なコーディングをしました。 ``` class LoginViewController: UIViewController { @IBOutlet weak var buttonTest: UIButton! override func viewDidLoad() { super.viewDidLoad() Timer.scheduledTimer(timeInterval: 8.0, target: self, selector: #selector(self.rotate), userInfo: nil, repeats: true) } func rotate() { UIView.animate(withDuration: 6.0, delay: 0.0, options: [.curveEaseInOut], animations: { 回転の処理 } } } ``` ボタンは回転するのですが、 アプリが起動して数秒たってから回転のアニメーションが始まってしまいます。 アプリが起動してアニメーションが始まるまでの時間を短くさせたくて 下記の様なコーディングをしました。 ``` class LoginViewController: UIViewController { @IBOutlet weak var buttonTest: UIButton! override func viewDidLoad() { super.viewDidLoad() Timer.scheduledTimer(timeInterval: 8.0, target: self, selector: #selector(self.rotate), userInfo: nil, repeats: true) } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated: Bool) func rotate() { UIView.animate(withDuration: 6.0, delay: 0.0, options: [.curveEaseInOut], animations: { 回転の処理 } } } ``` 上記のようなコーディングをすると、#selectorのところで以下の様なエラーに なりました。 ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/3ba26a3835841ca5b492e06516621210.png) そのため、#selectorのところを下記の様にコーディングをしてみました。 ``` Timer.scheduledTimer(timeInterval: 8.0, target: self, selector: #selector(LoginViewController.viewAppear(_:)), userInfo: nil, repeats: true) ``` コーディングエラーはでないものの 実機テストを行うとアニメーションが始まらなくなりました。 selectorを使ってviewDidAppear内のrotate()を呼び出すには どのようなコーディングをすべきでしょうか。 お手数をおかけいたしますが、ご教示いただけますでしょうか。 よろしくお願い致します。 ■補足 swift:3 xcode:8.2.1
回答: 反復してアニメーションさせるためにTimerを試されたのでしょうか? UIViewAnimationOptionsには反復に関する設定があるようですので、こちらを利用するという手が使えるかもしれません。 なお、オートレイアウト機能などとの干渉により、viewDidLoadの時点でアニメーションさせようとすると意図通りにならない可能性がありますので、TakeOneさんのようにviewDidAppearまで待った方がよさそうです。