2

1行に表示する必要のある長いテキストがあります。テキストが長すぎてUITextFieldオブジェクトに収まりません。テキスト(またはuitextfieldオブジェクト自体)を右から左にアニメーション化する方法を探しています。一部のiPhoneアプリでそれを見たことがありますが、その方法がわかりません。

テキストが大きく収まる場合は、ユーザーが読めるようにゆっくりと左にスクロールします。

これをどのように達成できるか考えていますか?

ありがとうございました!

4

4 に答える 4

2

Brian Stormont のAutoScrollLabelのようなソリューションを使用して、ここでさらに議論することができます。

それを含めた後、おおよそ次のことを行う必要があります。

AutoScrollLabel *marquee = [[AutoScrollLabel alloc] initWithFrame:marqueeFrame];
[view addSubview:marquee];
[marquee setScrollSpeed:16.8];
marquee.text = @"My long text";
[marquee readjustLabels];

[marquee scroll]; //This line is the one that actually starts the scrolling

かなり古いですが、今は配送アプリで使っています。

接線方向に関連していますが、必須ではありませんが、このアニメーション テキスト クラスAUIAnimatedTextは、サイズや色などのテキストの他のプロパティをアニメーション化できるようにします。

于 2012-04-13T07:43:57.173 に答える
1

これを処理するドロップインの代替品がUILabelあります。

https://github.com/cbpowell/MarqueeLabel

概要: MarqueeLabel は UILabel サブクラスであり、ラベルのテキストが使用可能な幅を超えたときにスクロール マーキー効果を追加します。ラベルのスクロール方向と速度/レートも指定できます。すべての標準 UILabel プロパティ (意味がある場合) は MarqueeLabel で使用でき、UILabel と同じように動作します。

私は MarqueeLabel の作成者でも、作成者とは何の関係もありません。

于 2015-01-25T22:05:52.597 に答える
0

解決策が 1 つありますが、実際には私のお気に入りではありません。viewController にAutoScrollLabel *marqueeLabelがある場合は、viewController の viewWillAppear メソッドでそのテキストを次のように設定します。

marqueeLabel.text = marqueeLabel.text;

私はこれ以外のものを見つけていません。また、その問題が発生している場合は、iPhone/iPod でマルチタスクを使用してみてください。アプリケーションを再度開いたときに、marqueeLabel のアニメーションが見つかりません。そのために、AutoScrollLabel クラスの commonInit にステートメントを追加します。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(readjustLabels) name:UIApplicationWillEnterForegroundNotification object:nil];

また、そのクラスの dealloc にもう 1 つのステートメントを追加します

[[NSNotificationCenter defaultCenter] removeObserver:self];
于 2012-05-11T11:00:58.190 に答える
0

私はこのようなことはしていませんが、 textRectForBounds:メソッド ( UITextField documentation ) をオーバーライドし、 NSTimerを使用して、このオーバーライドを行うことができると思います。タイマーでは、テキスト フィールドのsetNeedsDisplayメソッドを呼び出すだけです。

于 2012-04-13T05:51:04.210 に答える