我有一个长文本,需要在一行中显示。文本太长,无法放入 UITextField 对象。我正在寻找一种从右到左为文本(或 uitextfield 对象本身)设置动画的方法。我在一些 iPhone 应用程序中看到过,但不知道该怎么做。
这个想法是,如果文本很大,可以慢慢向左滚动,以便用户阅读。
知道如何实现吗?
谢谢!
我有一个长文本,需要在一行中显示。文本太长,无法放入 UITextField 对象。我正在寻找一种从右到左为文本(或 uitextfield 对象本身)设置动画的方法。我在一些 iPhone 应用程序中看到过,但不知道该怎么做。
这个想法是,如果文本很大,可以慢慢向左滚动,以便用户阅读。
知道如何实现吗?
谢谢!
您可以使用像 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与切线相关,但不是必需的,它允许您为文本的其他属性(如大小和颜色)设置动画。
现在有一个替代品可以解决UILabel
这个问题:
https://github.com/cbpowell/MarqueeLabel
概述: MarqueeLabel 是一个 UILabel 子类,当标签的文本超出可用宽度时添加滚动选取框效果。标签滚动方向和速度/速率也可以指定。所有标准的 UILabel 属性(有意义的地方)都可以在 MarqueeLabel 中使用,它的行为就像 UILabel。
我不是 MarqueeLabel 的作者,也不是与作者有任何关系。
我没有做过类似的事情,但我认为你可以覆盖textRectForBounds:方法(UITextField 文档)并使用NSTimer。在计时器中,您应该只调用文本字段的setNeedsDisplay方法。
有一种解决方案,但不是我最喜欢的。如果您的 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 中再添加一条语句
[[NSNotificationCenter defaultCenter] removeObserver:self];