2017-05-01 28 views
-1

私のviewController内のimageViewを "脈動"させたい場合は、もう一度大きくしてから、 "開始"ボタンが押されるまで繰り返すことを意味します。問題は、repeat-while-loopでviewDidLoad()でその関数を呼び出すたびに、何らかの理由でブレークポイントがあることです。 viewDidLoad私(の一部だwhileループを繰り返さない - なぜですか?

):私は、スタートボタンを押すと

repeat { 
    pulsate() 
} while hasStarted == false 

、hasStartedは真となり、脈動停止する必要があります。しかし、それは機能を開始しない、それはすぐにエラーを呼び出します。問題はどこですか?機能

func pulsate() 
{ 
    frameOR = imageView.frame 
    frameNext = CGRect(x: imageView.frame.midX - 35, y: imageView.frame.midY - 35, width: 80, height: 80) 
    let frameVDL = CGRect(x: imageView.frame.midX - 150, y: imageView.frame.midY - 150, width: 300, height: 300) 

    if start == false 
    { 
     UIView.animate(withDuration: 2, animations: { 
      self.imageView.frame = frameVDL 
     }) { (finished) in 
      UIView.animate(withDuration: 2, animations: { 
       self.imageView.frame = self.frameOR 
      }, completion: nil) 
     } 
    } 
} 

あなたの助けのためにあなたに感謝 -

は、ここに私の脈動()です!すてきな一日を!

+2

エラーは何ですか? –

+1

メインスレッドをブロックしています。プログラム制御がメインイベントループに戻る前に、ボタン(または他の)UIアクションメソッドは実行されません。 –

答えて

3

UIView.animateの組み込みオプションを使用すると、実際に行う作業を簡略化することができます。はスレッドをロックしないようにします。

は、この試してみて:

let frameOR = imageView.frame 
let frameVDL = CGRect(x: imageView.frame.midX - 150, y: imageView.frame.midY - 150, width: 300, height: 300) 

UIView.animate(withDuration: 2.0, 
       delay: 0.0, 
       options: [UIViewAnimationOptions.autoreverse, UIViewAnimationOptions.repeat], 
       animations: { 
       imageView.frame = frameVDL 
       }, 
       completion: nil) 

あなたImageViewのは、今、追加のコードを必要とせず、完全な「パルス状」のループにする必要があります。あなたは停止アニメーションへの準備ができたら、ちょうど呼び出し:

imageView.layer.removeAllAnimations() 
関連する問題