2012-04-17 10 views
0

編集:私はいくつかの進歩を得たので、私は単純化していると、問題を狭め:I have created new question, which is more clearer and more understandable I hopeビューを再利用してUIScrollViewのCore Animationでコンテンツオフセットを変更する方法はありますか?


私は非常に大規模な水平にサブビューを再利用しているUIScrollViewのを、スクロールしています。ユーザーが左にスクロールすると、右端のビューが一番左の位置に移動し、その内容が更新されます。同様に、ユーザーが右にスクロールすると、一番左のビューが一番右の位置に移動し、その内容が更新されます。同様に、UITableViewのようです。 scrollviewDidScroll:delegateメソッドを使用してうまく動作します。

ここでは、プログラム的にオフセットを変更する必要がありますが、カスタムアニメーションの動作(慣性と最終位置に戻る)が必要です。これをプロトタイプに

、私は、ビューは、アニメーションの間に混乱しないように、私は、無効デリゲートコールバックでオフセットコンテンツをアニメーション

[UIView animateWithDuration:contentOffsetCADuration 
         delay:0 
        options:UIViewAnimationOptionCurveLinear 
       animations:^{ 
         [self setContentOffsetNoDelegateCalls:contentOffset animated:NO]; 
       } 
       completion:^(BOOL finish){ 
         dispatch_async(dispatch_get_main_queue(), ^{ 
          [timer invalidate]; 
         }); 
       }]; 

を使用しています。しかし、私はそれらを再利用して再配置するために何かが必要です。

私の解決方法は、タイマーを作成してscrollViewDidScroll:を手動で呼び出すことです。通常はアニメーションと並行して再利用するようにします。アニメーションがアニメーションの前と同じ状態になってからスクロールビューのコンテンツが再表示され、以前は表示されていたページが画面外に移動します。

アニメーション中にサブビューを移動してコンテンツを更新する方法を絞り込んでいますか?

それとも、これをやって、完全に別の方法があるかもしれない...

+1

ない私は理解してだ気づいた - 「そうビューがアニメーション中にめちゃくちゃされていない」、そして質問「どのようにサブビューを移動する...アニメーション中」 。 setContentOffset:animated:なぜ呼び出さないの? scrollViewDidScrollが呼び出され、サブビューの位置を常に変えますか? – danh

+0

はい、カスタムアニメーションが必要です。私はUIScrollViewを実際にサブクラス化し、setContentOffset:animated:をオーバーライドしました。 animatedがyesの場合、Core Animationカスタムアニメーションを実行する必要があります。問題は、このカスタムアニメーション中に私はサブビューを再利用できないということです。 –

+0

setContentOffset:animated:アニメーションブロック内で、viewDidScrollが呼び出されない代わりに、アニメーションの最初と最後に他のデリゲートメソッドが呼び出されますが、これは嫌いです。 –

答えて

1

hereをチェックしてください。

編集:笑、ちょうどそれが同じ著者

-1

あなたが変更しようとするかもしれない、あなたがそれをするときに停止させる、その後

[self performSelector:<#(SEL)#> withObject:<#(id)#> afterDelay:<#(NSTimeInterval)#>]; 

からそれを呼び出すことができますMethodeの中でスクロールオフセットそれは特定の値に達する

関連する問題