更新:私はまだこの問題を解決したいと思いますが、animateWithDuration:delay:options:animations:completion:
に切り替わりました。これはもっとうまく動作します。それは春が与える最後の素晴らしい "バウンス"が欠けていますが、少なくともそれは制御可能です。UIPanGestureRecognizerの速度が速すぎるUIViewアニメーション
私は、iOS用の素敵なジェスチャー駆動型UIを作成しようとしていますが、値は素敵な自然な感じのアプリをもたらすようになっていくつかの困難に実行しています。
私は弾力のある春のアニメーションが好きなのでanimateWithDuration:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:completion:
を使用しています。私はvelocity
引数を、完成した状態のジェスチャ認識器によって与えられた速度で初期化しています。問題は、私がすばやくパンを動かして放して、速度が数千に及ぶと、私の見解が画面から飛んで終わり、そしてそのような目を見張るような復讐で前後にバウンスすることです。
私は、ビューが移動する必要がある距離の長さに対してアニメーションの時間幅を調整しています。そのため、必要なピクセルがほんの少しの場合、アニメーションにかかる時間が短くなります。しかし、それは問題を解決しませんでした。それはまだナッツに終わる。
私がを望むのは、ユーザーがドラッグしている速度でビューを開始する必要がありますが、ターゲットポイントに到達するとすばやく減速し、最後に少しだけバウンスする必要があります速度が妥当なものであれば)。
このメソッドまたは値を正しく使用しているのだろうかと思います。ここに私が何をしているかを示すコードがあります。どんな助けもありがとう!
- (void)handlePanGesture:(UIPanGestureRecognizer*)gesture {
CGPoint offset = [gesture translationInView:self.view];
CGPoint velocity = [gesture velocityInView:self.view];
NSLog(@"pan gesture state: %d, offset: %f velocity: %f", gesture.state, offset.x, velocity.x);
static CGFloat initialX = 0;
switch (gesture.state) {
case UIGestureRecognizerStateBegan: {
initialX = self.blurView.x;
break; }
case UIGestureRecognizerStateChanged: {
self.blurView.x = initialX + offset.x;
break; }
default:
case UIGestureRecognizerStateCancelled:
case UIGestureRecognizerStateEnded: {
if (velocity.x > 0)
[self openMenuWithVelocity:velocity.x];
else
[self closeMenuWithVelocity:velocity.x];
break; }
}
}
- (void)openMenuWithVelocity:(CGFloat)velocity {
if (velocity < 0)
velocity = 1.5f;
CGFloat distance = -40 - self.blurView.x;
CGFloat distanceRatio = distance/260;
NSLog(@"distance: %f ratio: %f", distance, distanceRatio);
[UIView animateWithDuration:(0.9f * distanceRatio) delay:0 usingSpringWithDamping:0.7 initialSpringVelocity:velocity options:UIViewAnimationOptionBeginFromCurrentState animations:^{
self.blurView.x = -40;
} completion:^(BOOL finished) {
self.isMenuOpen = YES;
}];
}
ちょっとインナースプリング速度を正しく使う方法を見つけましたか? – bogardon
1つのフレームのしっかりとした出荷を終えた... – Arclite