我有一个很长的文字,我需要在一行中显示。文本太长,无法容纳在UITextField对象中。我正在寻找一种从右到左动画文本(或uitextfield对象本身)的方法。我在一些iPhone应用程序中看到过,但不知道该怎么做。
这个想法是,如果文字很大,可以慢慢向左滚动,以便用户可以阅读。
知道如何实现这一目标吗?
谢谢!
答案 0 :(得分:2)
您可以使用像Brian Stormont AutoScrollLabel这样的解决方案,进行更多讨论here。
在包含之后,您需要大致执行以下操作:
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,它允许您为文本的其他属性设置动画,如大小和颜色。
答案 1 :(得分:0)
我没有做过这样的事情,但我认为你可以覆盖 textRectForBounds:方法(UITextField documentation)并使用 NSTimer 。在计时器中,您应该只调用文本字段的 setNeedsDisplay 方法。
答案 2 :(得分:0)
有一个解决方案,但不是我的最爱.. 如果viewController中有 AutoScrollLabel * marqueeLabel ,则将viewConill的viewWillAppear方法中的文本设置为: -
marqueeLabel.text = marqueeLabel.text;
除了这个,我还没有找到任何其他东西。 此外,如果你有这个问题,那么尝试在你的iphone / ipod中使用多任务处理,当你再次打开你的应用程序时...你将找不到marqueeLabel动画..为此在AutoIncrollLabel类的commonInit中添加一个语句: -
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(readjustLabels) name:UIApplicationWillEnterForegroundNotification object:nil];
并在该类的dealloc中添加一个语句
[[NSNotificationCenter defaultCenter] removeObserver:self];
答案 3 :(得分:0)
现在有UILabel
的替代品可以解决这个问题:
https://github.com/cbpowell/MarqueeLabel
概述:MarqueeLabel是一个UILabel子类,当标签文本超出可用宽度时,会添加滚动选框效果。标签滚动方向和速度/速率也可以指定。 MarqueeLabel中提供了所有标准UILabel属性(有意义的地方),它的行为就像UILabel。
我不是MarqueeLabel的作者或以任何方式与作者有关。