4

私は古いプロジェクトに取り組んでおり、除外したいPOP frameworkネイティブiOSフレームワークでアニメーションを行うことができると確信しています。Swiftの `POPSpringAnimation`からネイティブiOSフレームワークへの移行

[UIView animateWithDuration:1.0 
         delay:0 
    usingSpringWithDamping:springBounciness 
     initialSpringVelocity:springVelocity 
        options:UIViewAnimationOptionCurveEaseInOut animations:^{ 
         self.selectedViewController.view.frame = rect; 
} completion:^(BOOL finished) { 
    // cool code here 
}]; 

をしかし、私は同じ結果を得るいけない、といくつかの疑問が上昇:私は試してみました何

POPSpringAnimation *springAnimation = [POPSpringAnimation animationWithPropertyNamed:kPOPViewFrame]; 
springAnimation.toValue = [NSValue valueWithCGRect:rect]; 
springAnimation.velocity = [NSValue valueWithCGRect:CGRectMake(springVelocity, springVelocity, 0, 0)]; 
springAnimation.springBounciness = springBounciness; 
springAnimation.springSpeed = springSpeed; 
[springAnimation setCompletionBlock:^(POPAnimation *anim, BOOL finished) { 
    if (finished) { 
     // cool code here 
    } 
}]; 

[self.selectedViewController.view pop_addAnimation:springAnimation forKey:@"springAnimation"]; 

:ここ

は、古いコードです

  1. ですspringBouncinessポップでusingSpringWithDampingに相当?
  2. springSpeedと同等のものはUIViewですか?
  3. どのくらいの期間、どのくらいの期間がPOPSpringAnimationですか?

編集: 3番目の質問については、Githubでissueが見つかりました。

UIViewは、コアアニメーションやその他のiOSネイティブアニメーションフレームワークを使用して行うことができますか?

+0

Popはダンプニングを決定するために特殊なソルバを使用しています。あなたはCASpringAnimationに近づくかもしれませんが、Popは勝てません。とりわけ割り込み性がある。 – agibson007

+0

再びお詫び申し上げますが、この場合、ソルバーは解消されます。質問1にもはい。私は2が減衰と初期速度の組み合わせだと思います。 3.ソルバーは、ダンペネリングとビューのサイズを使用して、バネの弾力で解決します。 – agibson007

+0

@iosgeek plsが私の答えをチェックします。 ty。 – GeneCode

答えて

1

ポップパラメータの値の範囲は0-20です。しかしusingSpringWithDampingにはそのような範囲はありません。 Popはカスタムライブラリであることは明らかですが、UIViewアニメーションには独自の値域がありますが、独自の値域があります。アップルのドキュメントから

は、usingSpringWithDampingパラメータは、実際に湿った比率であり、それは指定しています

スムーズに振動を高めるために減衰比ゼロに近い値1採用の を使用し、振動のないアニメーションを減速します。

1.これと同等のバウンスが必要な場合は、値1以下の値を使用する必要があります。次のスプリングバウンス式を試してみてください。 springVelocityため

float uiViewBounciness = (20.0 - springBounciness)/20.0; 
.. usingSpringWithDamping:uiViewBounciness .. 

2.As、ポップUIViewのアニメーションのみ初速度を指定し、一方、すべてのアニメーションフレームに対して同じ速度を実現し、この速度は、全持続時間と湿った比率に基づいて、時間をかけて減衰されます。だから、できるだけ近いアニメーションを取得するには、次のように行うことができます:

float uiViewSpeed = springVelocity * 2.0; 
.. initialSpringVelocity:uiViewSpeed .. 

3.As期間中に、あなたはUIViewのメソッドでanimateWithDurationに同じ値を実装することができます。

最後に、値を試してPopアニメーションと比較する必要があります。 UIViewのアニメーションを使用してPopと全く同じアニメーションを取得できるとは思えませんが、十分近いはずです。

+0

十分な公正;)それは私たちがとにかくできる唯一のものです。 – iOSGeek

関連する問題