2011-09-06 12 views
6

ユーザーが私のUIScrollViewを手動でスクロールすると、新しく更新されたcontentOffsetの値とともに、アニメーション中に繰り返しデリゲートのscrollViewDidScrollメソッドが呼び出されます。 "[scrollView setContentOffset:320 animated:YES"]を呼び出すと、デリゲートメソッドも同じように呼び出されます。 通常のスクロール速度がユーザーエクスペリエンスにとって速すぎると判断したため、UIViewクラスリファレンスで推奨されているように、「[scrollView setContentOffset:320]」を「animatedWithDuration:」ブロックに囲みます。UIScrollViewをアニメーション中にscrollViewDidScrollメッセージを送信する方法

...私のscrollViewDidScrollメソッドは、アニメーションの開始時に最終値で1回だけ呼び出され、アニメーションではそれ以降は呼び出されません。代わりに古い "beginAnimations:"メソッドを使用すると同じ効果が得られます。

だから誰もこれを解決する方法を知っていますか?

ところで、UIScrollViewの "setContentOffset"メソッドは同じ動作を示します。以前はアニメーション中に呼び出されていましたが、今は一度しか呼び出されていません。

答えて

6

Fichekのヒントのおかげで、私はこれを動作させました。 Fichek氏によると、アニメーション中に変更されたプロパティの通知を受け取ることはありません。つまり、変更されたプロパティに依存するものも同時にアニメーション化されるようにすることです。元のプロパティと同じブロックにアニメーションを設定する必要があります。 アニメーションに「UIViewAnimationOptionAllowUserInteraction」を設定すると、同じプロパティの進行中のユーザー操作が引き続き機能します。驚くほどうまく言えば、私は言います。

[UIView animateWithDuration:0.5 delay:0 
        options:UIViewAnimationOptionAllowUserInteraction 
       animations:^{ 
    [theScrollView setContentOffset:offset]; 
    // compute newCenter from the new offset 
    theDraggedView.center = newCenter; 
} completion:^(BOOL finished) {}]; 
+0

これは、より多くの回避策です:私の具体的なケースでは

- - 下UIScrollViewのがスクロールしながら、ドラッグビューの静止を保つために、ここでは私のセットアップ私のアニメーションがどのようです。私はscrollViewDidScrollのスクロールの変更をデリゲートに通知します。これはこのメソッドでは実現できません。同様の質問はここに投稿:http://stackoverflow.com/questions/21749950/how-to-properly-animate-uiscrollview-contentoffset – Vlad

関連する問題