2011-12-04 1 views
1

私のアニメーションは、現在の状態からピックアップしていない:setAnimationBeginsFromCurrentState = YESがiOS 5またはiPadで動作していませんか?機内では、別のキック、すべての私のアニメーションブロックを用いて構成されているにもかかわらず、ときながら

setAnimationBeginsFromCurrentState=YES 

同じことが、新たな(ブロックベースのアニメーションにも当てはまります方法はiOS 4以降)、UIViewAnimationOptionBeginFromCurrentStateオプションが設定されています。

古いデバイスでは、これは完全に機能します。 iOS 5とiPad Simulatorではそれはありません。回避策はありますか?

(注:。。それだけではない、シミュレータ、試験したすべてのデバイス上で動作しているようです)

ここで4.3または5.0のiPad Simulatorで動作しない例です:

[UIView animateWithDuration:0.5 
         delay:1.0f 
        options:UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionBeginFromCurrentState | 
UIViewAnimationOptionOverrideInheritedDuration | UIViewAnimationOptionOverrideInheritedCurve 
       animations:^{ 
        self.layer.transform = CATransform3DScale(CATransform3DIdentity, 0.5f, 0.5f, 1.0f); 
       } 
       completion:^(BOOL finished) { 
        [self performSelector:@selector(finishedScaling)]; 
       }]; 

別アニメーションは変換スケールを0.1,0.1(=非常に小さい)に設定し始めます。機内では、このアニメーションが起動し、0.5、0.5に戻ります。キックインすると、以前にキックオフされたアニメーションは、0.1、0.1(=非常に小さい)で突然終了します。その後、0.1から0.5にスケールアップします。起こらないでください。おそらく、悪いオプションの組み合わせですか?ここ

+0

私はiPadシミュレータでios5でブロックベースのアニメーションをやっていますが、現在の状態からうまく始まっています。大したことはありませんが、「壊れている」とは思われません。コード? – jrturton

+0

私は同じ問題を抱えていますが、デバイス上にもあります。私はなぜこの問題が顕著になったのか分かりません。 – jowie

答えて

0

の動作例である:

 [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationDuration:1]; 
     CGPoint p = v.center; 
     p.x += 100; 
     v.center = p; 
     [UIView commitAnimations]; 

     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationBeginsFromCurrentState:YES]; 
     [UIView setAnimationDuration:1]; 
     CGPoint p2 = v.center; 
     p2.y = 0; // and try changing x to y 
     v.center = p2; 
     [UIView commitAnimations]; 

setAnimationBeginsFromCurrentState:YESと、2つのアニメーションは、一緒になって図のxおよびy位置を変更すること、協力します。それがなければ、最初のアニメーションは、2番目のアニメーションが始まる前の右に「ジャンプ」として表現されます。だから私はsetAnimationBeginsFromCurrentState:YESはまだその仕事を正しくやっていると言うでしょう。 iPadのシミュレータでも同じように動作します。だから反例がある。

別のコメントの要望に応じて、実際には動作しないコードを表示できますか? (最初のアニメーションではなく2番目のアニメーションのサンプルコードが表示されているため、テストすることはできません)

+0

他のアニメーションはまったく同じように見えます。ちょうど別の変換を設定します。基本的には、トランスフォームをパラメータとして受け取るメソッドを呼び出すだけです。 – dontWatchMyProfile

+0

それは素晴らしいですが、iOS 5 iPadシミュレータでうまく動作するコードを提供しました。 iOS 5のiPadシミュレータでうまく動作しないコードを提供するのはあなたの仕事です。そうしないと誰にどのように問題があるのが見えますか? – matt

2

ビューアニメーションブロックにself.layer.transform =と言っています。ビューアニメーションブロックは、ビューをアニメートするためのものです。これは、レイヤのアニメーション可能なプロパティではなく、ビューのアニメーション可能なプロパティを設定することで行います。

さらに、selfがビューの場合、self.layer.transformは暗黙的にアニメーション化できません。ビューの下層を暗黙的にアニメーション化(つまりプロパティを設定)することはできません。 self.layer.transform =と言うと、レイヤーは常に新しい値にジャンプします。

解決方法は、self.transform =(自己がビューの場合)、またはブロックベースのアニメーションをまったく使用しないことです。コアアニメーション(CABasicAnimationなど)を使用してレイヤーをアニメーション化します。

関連する問題