2016-07-01 4 views
0

現在、私はループアニメーションメソッドを書いています。このメソッドは新しいarc4random_uniformを生成し、それをCGFloatに変換します。これらの値は、次にようにanimateWithDuration関数に挿入される。アプリケーションスウィフトをクラッシュさせずにループ乱数を生成2.2

func randomAnimationForPostPackets() { 
    while true { 
    let randomCoordinatesXInt: UInt32 = arc4random_uniform(300) 
    let randCoordsX = CGFloat(randomCoordinatesXInt) 
    let randomCoordinatesYInt: UInt32 = arc4random_uniform(300) 
    let randCoordsY = CGFloat(randomCoordinatesYInt) 
    UIView.animateWithDuration(5, delay: 0, options: [.AllowUserInteraction], animations: { 
     self.postPacketView.center.x = randCoordsX 
     self.postPacketView.center.y = randCoordsY 
     }, completion: nil) 
    } 
} 

による乱数の一定の生成に、whileループでループにアプリケーションがクラッシュするこの機能をしようとします。毎回新しいランダムセットのセットに基づいてループアニメーションを実装するにはどうすればよいでしょうか?

+0

「*乱数の生成が一定であるためにアプリケーションがクラッシュする」*とはどういう意味ですか?どうして知っていますか?特定のエラーメッセージとスタックトレースは何ですか? –

+0

また、「ループアニメーション」*とはどういう意味ですか? –

+0

アプリケーションのCPU使用率は、起動する前に100%に加速します。私はこれが乱数の生成が一定であることによると考えています。 – Tofite

答えて

0

@ Paulw11は基本的にコメントに入れました:animateWithDurationの呼び出しは非同期です。つまり、ループを5秒間「ブロック」していません。あなたのループは邪悪なスピンを速くしています。最初のアニメイトが偶然になる前に、数十億回ものスピードです。実際には、あなたのループは、アニメーションが決して試行されないようにすべてのリソースを取っていると思われます。

3

ループを使用すると、すべてのCPUを使用できるほど速くアニメーションが呼び出され、最終的にはメモリ不足になります。 animateWithDurationには、アニメーションが完了したときに呼び出されるcompletionクロージャがあります。これを使用して、次のアニメーションを設定します。

func randomAnimationForPostPackets() { 
    let randomCoordinatesXInt: UInt32 = arc4random_uniform(300) 
    let randCoordsX = CGFloat(randomCoordinatesXInt) 
    let randomCoordinatesYInt: UInt32 = arc4random_uniform(300) 
    let randCoordsY = CGFloat(randomCoordinatesYInt) 

    UIView.animateWithDuration(5, delay: 0, options: [.AllowUserInteraction], animations: { 
     self.postPacketView.center.x = randCoordsX 
     self.postPacketView.center.y = randCoordsY 
    }) { (finished) in 
     self.randomAnimationsPostPacket() 
    } 
}