2009-07-06 10 views
5

多くのコンテンツを持つUITextViewがあります。アニメーションは、スクロールではなく、滑らかになるように、これは、本当によく働くiPhone UITextViewを自動スクロールしますが、手動でスクロールすることもできます

scrollPoint = CGPointMake(scrollPoint.x, scrollPoint.y + 10); 
[textView setContentOffset:scrollPoint animated:YES]; 

:私はUITextViewが自動的にNSTimerループで+ 10個のピクセルをスクロールすることを可能にするボタンがあります。ユーザーが指でスクロールして前後にスキップできるようにしたいのですが、スクロールアニメーション後のこのコードによって、スクロールは自動的にスクロールされる場所にスナップします。

私は手動でスクロールした後に、scrollPoint変数をリセットする必要がありますが、その方法はわかりません。私はデリゲートメソッドを実装しようとしました

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView; 

しかし、このメソッドは私の自動スクロールでも発生します。

アイデア?

答えて

12

あなたはそれがどこにあるかに対して移動させることができます:

scrollPoint = textView.contentOffset; 
scrollPoint.y= scrollPoint.y+10; 
[textView setContentOffset:scrollPoint animated:YES]; 
+0

男私はこの問題に近すぎる私の頭を持っていた。あなたのソリューションは美しく動作します!ありがとう。 –

+0

「アニメーション:いいえ」とスムーズにスクロールします – DerWOK

0

私はコンテンツAPIを戦ってのあなたの種類をスクロールするには効果的に2つの方法を持っていることによってだと思います。

私が正しく理解している場合、現在の設定では、アニメーションを起動するボタンがあります。

このようにスクロールすると、アニメーションが作成され、別のスレッドで実行されます。アニメーションが実行されている間、プレゼンテーションレイヤーが変更されています。ただし、実際のコンテンツオフセットは、アニメーションが完了するまでに設定されています。

これはすでにアニメーション化されている間、同じプロパティをアニメートしようとすると、これは正常に透過的に動作します。

通常、この場合、既存のアニメーションをキャンセルし、フレームをプレゼンテーションレイヤー(現在の画面上の位置)に設定してから、新しいアニメーションを適用します。

ただし、textView(setContentOffset:animated :)の簡易メソッドを使用しています。これを行うと、より少ないコード行と引き換えに、きれいなアニメーションコントロールを放棄します。

私は、進行中のスクロールを停止することは難しいかもしれないと思うか、より高いレベルのAPIを使用することは不可能です。これは、少なくともUIViewアニメーションブロックを試してみて、実際にはCAAnimationを作成する可能性が高いことを望むことを意味します。

簡単な解決策は、textViewをスクロールする手段の1つに解決することです。 HIGはiPhone上での直接操作を利用しています。両方向にスクロールするのが簡単な場合でも、ボタンメソッドを省略し、現在実装している直接操作を使用することをお勧めします。

2

ベンと同じことをしたいと思っていましたが、アニメーションが表示時間の面でコストがかかりすぎて、目的を破ったようです。私はそれを使って遊んで、次のコードがあなたがしたいことを正確に行い、システムをまったく駄目にしていないことを発見しました。

セットアップ

if (autoscrollTimer == nil) { 
    autoscrollTimer = [NSTimer scheduledTimerWithTimeInterval:(35.0/1000.0) 
                target:self 
                selector:@selector(autoscrollTimerFired:) 
                userInfo:nil 
                repeats:YES]; 
} 

キーアニメーションOFFを回すと小さい単位のオフセット移動です。それは速く走るようであり、それは手動のスクロールに干渉しない。

- (void)autoscrollTimerFired:(NSTimer*)timer { 
    CGPoint scrollPoint = self.textView.contentOffset; 
    scrollPoint = CGPointMake(scrollPoint.x, scrollPoint.y + 1); 
    [self.textView setContentOffset:scrollPoint animated:NO]; 
} 

より多くの経験を持つ誰もがこの方法の問題点を見れば、私は任意のフィードバックをいただければ幸いですので、私はObjective-Cのとiphoneの開発にはかなり新しいです。

+0

私の場合は本当にアニメーションが気に入っていましたが、1ピクセルだけ動いていれば滑らかになります。しかし、他の理由から、私は、スクロールビューを継承しないwebViewを使用するように切り替えたので、スクロールするにはJavascriptを使用しなければなりませんでした。ヤックわずかに不安定でしたが、それは価値のあるトレードオフでした。 –

関連する問題