2013-11-04 17 views
5

私はgoogleとそれを検索していますが、私の問題を解決するためにインターネット上に何も見つかりませんでしたが、私の問題は解決しやすいと思っていますが、それ。UILabelの自動スクロール機能

私は、テキストを読むためにスクロールできる非常に長いテキストを持つReadingViewというテキストを含むviewcontrollerを持っています。ユーザーがReadingViewに行くとき、それはそれ自体で一番下まで自動スクロールし、ユーザーは、私は、問題は、私はこのコード

[UIScrollView beginAnimations:@"scrollAnimation" context:nil]; 
[UIScrollView setAnimationDuration:1.0f]; 
[scroll setContentOffset:CGPointMake(x, y)]; 
[UIScrollView commitAnimations]; 
で問題なく自動スクロールを行うことができますです

を実装UISliderことにより、スクロールの速度を上げることができます

しかし、コードは時間を基準にしています。私は、フレームまたはピクセルに基づいてアニメーションを見つけなければならない。なぜなら、時間に基づいてアニメーションを使用するとテキストの一部が非常に長いため、短いテキストは非常に遅くなる一方で、非常に速く下にスクロールします。

私のような

「scrollviewねえ、フレームごとにあなたが まで10ピクセルでコンテキストの終わりを下に移動する必要があると私はどのくらい気にしないのアニメーションを行うことができれば、皆さんはどんな考えを持っていますかそれはかかります、速度を修正しました! " Fogmeisterのお勧めで完了

あなたの助けをありがとう、君たちは私にキーワードを与えることによって私を助けるか、何ができ

UPDATE 。 概念はブロックアニメーションを使用して、 時間=テキスト長/速度 を使用して各テキストの時間を計算し、各テキストの異なる時間を取得し、その時間をアニメーションに使用します。私はこれを考えることはありません....私はいつも探しているのは、間違ったキーワードであるPIXELによるアニメーションを行う機能です。

CGFloat scrollingPointSpeed = myslider.value; //value of UI Slider// 
CGFloat time = offset/scrollingPointSpeed ; 
[UIView animateWithDuration:time delay:0.0 options:UIViewAnimationOptionCurveLinear animation:^() 
{ 
self.scroll.contentOffset = CGPointMake(0, offset); 
} 
completion:nil]; 
+0

uilabelの総ライン数に基づいてsetAnimationDurationを設定します – NANNAV

+0

このアニメーション方法は、iOS 4以降では使用しないでください。私の答えのようなブロックベースのアニメーションを使用する必要があります。 – Fogmeister

答えて

3

OK、まず、CABasicAnimationを使用しないでください。ベストプラクティスの方法は、ブロックベースのアニメーションを使用することです。

第2に、これはかなり簡単です。

あなたはこれを適用することができ、スクロール量の最大値である

CGFloat maxOffsetWidth = self.scrollView.contentSize.width - CGRectGetWidth(self.scrollView.frame); 

...スクロールビューの最大オフセットを計算することができます。距離である。

ここで、時間(時間)を調整するには、スピードを考慮する必要があります。 1秒あたり50ポイントと言います。

あなただけの別の値を使用し、その後垂直たいのであれば、今...一緒に

明らか
CGFloat maxOffsetWidth = self.scrollView.contentSize.width - CGRectGetWidth(self.scrollView.frame); 

CGFloat scrollingPointsPerSecond = 50.0; 

CGFloat time = maxOffsetWidth/scrollPointsPerSecond; 

[UIView animateWithDuration:time 
       animations:^() { 
    self.scrollView.contentOffset = CGPointMake(maxOffsetWidth, 0); 
}]; 

をそれを置くことができます、これは、水平方向のスクロールを使用します。

QUICK EDITは

上記アニメーション関数UIAnimationOptionCurveEaseInOutデフォルトのアニメーション曲線を使用します。これは、スクロールの速度が最初から0からゆっくりと加速し、最後にゆっくりと減速して0に戻ることを意味します。

リニアモーションが必要です。即ち、スクロールの速度は全ての点で同じである。これを行うには、上記とは少し異なる機能が必要です。 2つの余分なパラメータを追加するだけです...

[UIView animateWithDuration:time 
         delay:0.0 
        options:UIViewAnimationOptionCurveLinear 
        animation:^() { 
         self.scrollView.contentOffset = CGPointMake(maxOffsetWidth, 0); 
        } 
       completion:nil]; 

これは、直線的な動きで欲しいものを正確に行います。

+1

ありがとうございました!私は明日それをテストします。結果を伝えます。 – Einzeln

+0

恐ろしい!!!ありがとうございました。あなたの方法を使って、テキストの全高を計算し、UISliderの速度で除算しました。私はそれがこのように超簡単にすべきだと知っているが、それほど馬鹿だ!!ハハありがとう。 – Einzeln

+0

心配はいりません。私はいつも自分自身があまりにも多くのことを思っていて、本当に簡単な問題を非常に複雑にしている。お役に立てて嬉しいです :) – Fogmeister

関連する問題