2012-01-02 4 views
5

iPhoneの楽器を作成しています。私のアプリでは、私がCALayerに触れるとノートが再生され、レイヤーはノートの持続時間の間振られます。IOS 5とRemoteIOでCABasicAnimationの遅れが発生する

これはiOS 4.1で完全に機能していましたが、複数のノートを連続して押すと、iOS 5.0.1にアップグレードして大きな遅れの問題が発生しました。多くの痛みの後、私はタッチされたCALayerの次の動揺アニメーションコードに絞っています。

// here is an example wiggle 
CABasicAnimation *wiggle = [CABasicAnimation animationWithKeyPath:@"transform"]; 
wiggle.duration = 0.1; 
//wiggle.repeatCount = 1e100f; 
wiggle.repeatCount = 100; 
wiggle.autoreverses = YES; 
wiggle.toValue = [NSValue valueWithCATransform3D:CATransform3DRotate(fret.fretLayer.transform,0.2, 0.0 ,1.0 ,2.0)]; //angle, x , y , z 
wiggle.fromValue = [NSValue valueWithCATransform3D:CATransform3DRotate(fret.fretLayer.transform,-0.2, 0.0 ,1.0 ,2.0)]; //angle, x , y , z 

// doing the wiggle 
[note.noteLayer addAnimation:wiggle forKey:@"wiggle"]; 

は、私はアニメーションが層に添加された最後の行を遮断した場合、すべての遅れはすぐに消えます。メインスレッドが何とかブロックされているか、メインスレッドで実行されていないように感じますが、performSelectorOnMainThread:withObject:waitUntilDone:NOという関数を呼び出そうとしましたが、違いはありません。もし私がたくさんのノートを本当に素早く押すと、アプリケーション全体が一時停止し、それから2年後にはそれ自体がキャッチアップして突然すべてのサウンドが再生され、アニメーションは最終的にすべて不安定になり、

誰かがiOS 5のCABasicAnimationで珍しい問題を知っていますか?リピート時に不特定の期間CALayersをアニメーション化する試みができる代替アニメーションAPIはありますか?誰でもどのように問題を突き止めることができるかについての提案や推測はありますか?

編集: アニメーションの性質とはまったく関係がないと私は判断しました。私はウィグルコードを単に色を消すようなコードに置き換えましたが、私はまだノートが遅れて再生するのと同じラグエフェクトを得ています。

CABasicAnimation *wiggle = [CABasicAnimation animationWithKeyPath:@"backgroundColor"]; 
wiggle.duration = 2; 
wiggle.toValue = (id)[UIColor whiteColor].CGColor ; 
wiggle.fromValue = (id)[UIColor colorWithRed:0.1 green:0.2 blue:0.8 alpha:0.4].CGColor; 

おそらくCoreAudio/RemoteIOの変更と関係があると思われますか?そして、それはメインスレッドを妨げているのですか?

答えて

1

最後に、問題を引き起こしていたことの真の性質を調べました。 iOS 5でshouldRasterize = YESを使用すると問題が発生します。

私のアプリでは、レイヤーをshouldRasterize = YESに設定したUIViewに100以上のCALayersを埋め込みました。私は、問題を再現するまで、新しいアプリケーションを作成し、ビットを追加しました。最終的にはこれがこのようになりました。 iOS 4ではこれは問題ではありません。 iOS 5ではそうです。 shouldRasterizeをオフにすると、問題はすぐに消えます。

アップルにバグレポートを提出しました。

0

テストのために、CABasicAnimationを[UIView beginAnimation/commitAnimation]に置き換えてみてください。

+0

UIViewアニメーションはCALayersで機能しますか?私は自分のコードを書こうとしたし、また、ここからトップの答えを使用してみました:http://stackoverflow.com/questions/929364/how-to-create-iphones-wobbling-icon-effectしかし、一見一見無視の同じ効果がありますファンクションを実行して、それを通過する(つまり1回だけ実行する)ように、 fret.fretLayer.transform = CATransform3DMakeRotation(-0.2、0.0、1.0、2.0) コードを実行します。 私が投稿したリンクからのトップアンサーは、CATransform3DではなくCGAffineTransformを使用しているようですが、CALayersに直接CGAffineTransformを適用するようですか? アイデアをお持ちですか?(ps.thanks) – chopsalot

関連する問題