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の変更と関係があると思われますか?そして、それはメインスレッドを妨げているのですか?
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