5

多くのコンテンツを持つ UITextView があります。UITextView が NSTimer ループで + 10 ピクセルを自動的にスクロールできるようにするボタンがあります。

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

アニメーションによってスクロールがかなりスムーズになるため、これは非常にうまく機能します。ユーザーが指でスクロールして前後にスキップできるようにしたいのですが、スクロールアニメーションの後のこのコードにより、スクロールは自動スクロールされた場所に戻ります。

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

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

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

何か案は?

4

3 に答える 3

12

あなたはそれがどこにあるかを基準にしてそれを動かすことができます:

scrollPoint = textView.contentOffset;
scrollPoint.y= scrollPoint.y+10;
[textView setContentOffset:scrollPoint animated:YES];
于 2009-07-06T20:30:35.030 に答える
3

あなたが Ben をやろうとしているのと同じことをしたかったのですが、アニメーションは表示時間の点でコストがかかりすぎて、目的を達成できなかったようです。私はそれをいじってみましたが、次のコードはあなたがやりたいことを正確に実行し、システムをまったく動かさないことがわかりました。

設定

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

重要なのは、アニメーションをオフにして、オフセットを少しずつ移動することです。より速く実行されているようで、手動スクロールを妨げません。

- (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 の開発にかなり慣れていないので、経験豊富な人がこのアプローチで問題を見つけたら、フィードバックをいただければ幸いです。

于 2010-07-12T20:49:31.910 に答える