2

次のようにブロックアニメーションを使用して、画面全体で非常にゆっくりとアニメーションを繰り返している画像ビューがあります。

[UIView animateWithDuration:100.0f
                      delay:0.0f
                    options:UIViewAnimationOptionCurveLinear | UIViewAnimationOptionRepeat
                 animations:^(void) {
                     pattern.frame = CGRectMake(0-(pattern.frame.size.width/2), 0, pattern.frame.size.width, pattern.frame.size.height);
                 }
                 completion:NULL];

基本的に画像は画面幅の2倍で、繰り返すと連続してループしているように見えます。

これはすべて正常に機能しますが、私がやりたいことは、回転タッチ ジェスチャに基づいてスクロールを高速化または低速化することです。ジェスチャ レコグナイザなどをセットアップしていますが、現在のアニメーションを変更して速度を上げることはできますか?

そうでない場合、現在実行中のアニメーションをキャンセルして、より短い/より長い時間の別のアニメーションに置き換えることはできますか?

ところで、ジェスチャ認識エンジンでまったく同じアニメーション ブロックを使用してみました。

-(void)rotatedSpinner:(UIRotationGestureRecognizer *)gestureRecognizer{
    CGFloat rotation = gestureRecognizer.rotation;

    [UIView animateWithDuration:100-(rotation*10)
             delay:0.0f
             options:UIViewAnimationOptionBeginFromCurrentState
             animations:^(void) {
                 pattern.frame = CGRectMake(0-(pattern.frame.size.width/2), 0, pattern.frame.size.width, pattern.frame.size.height);
             }
             completion:NULL];
}

..しかし、それはまったく何もしないようですか?どんな助けでも感謝します。

4

2 に答える 2

0

ユーザーが指でもスクロールできるゆっくりとスクロールするビューが必要な場合は、UIScrollView を使用することをお勧めします。NSTimer を使用して、スクロール ビューのコンテンツ オフセットを継続的に更新できます。ユーザーがスクロールを開始したら、このタイマーを無効にして、好きなようにスクロールさせます。彼が手放し、スクロール ビューの減速が停止したら (デリゲートに通知されます)、自分で再び移動を開始できます。

于 2012-07-04T20:33:35.083 に答える
-1

ダイヤルを回すように、回転ジェスチャでアニメーションの速度を上げたり下げたりしたい場合は、次のようにします。

ビューのレイヤーに速度プロパティを設定します。

ほとんどの UIView アニメーションは、ビューのレイヤー オブジェクトに CAAnimation を追加することになるため、これは機能するはずです。このようなもの:

pattern.layer.speed = .5 //アニメーションを半分の速度まで遅くする

2 の値は、アニメーションを完全に停止します。値を 2 にすると、2 倍の速度で実行されます。

于 2012-07-05T21:18:51.880 に答える