2

我有一个 UILabel,我想像 HTML 中的 marquee 标签一样滚动,我应该怎么做?

#define LEFTSCROLLDIRECTION 0
#define RIGHTSCROLLDIRECTION 1

MarqueeLabel *marquee = [[MarqueeLabel alloc] initWithFrame:CGRectMake(10, 10, 300, 30)];
label.scrollDirection = LEFTSCROLLDIRECTION;
[self.view addSubview:marquee];

编辑

我发现门课一开始似乎有效..

但这有一个错误..如果我在 UINavigationController 中向前导航并在一段时间后弹出 pushViewController,则 autoScrollLabel 停止动画..

AutoScrollLabel *autoScrollLabel = [[AutoScrollLabel alloc] init];
autoScrollLabel.text = @"Hi Mom!  How are you?  I really ought to write more often.";
autoScrollLabel.textColor = [UIColor yellowColor];
4

4 回答 4

3

查看这个开源组件,实际上称为 MarqueeLabel。

它使这变得非常容易。

于 2014-04-02T21:17:24.440 回答
2

在 Interface Builder(Main.storyboard 文件)中,我添加了一个 UIView 给他一个位置,

我在 ViewController.h 中钩住了对象

IBOutlet UIView *marqueeView;

之后,在 ViewController.m 中,进入我编写的 viewDidLoad 方法:

MarqueeLabel *marqueeLabel = [[MarqueeLabel alloc] initWithFrame:CGRectMake(0, 0, 315, 20) duration:8.0 andFadeLength:10.0f];
marqueeLabel.text = @"marquee text.. this text will scroll";
[marqueeView addSubview:marqueeLabel];

我希望你能有用。

于 2014-05-21T18:01:28.017 回答
1

UILabel 是一个 UIView。有很多方法可以为 UIView 设置动画,但使用块可能是您的最佳选择

MarqueeLabel *marquee == ...
[UIView animateWithDuration:5.0 animations:^{ 
    CGRect frame = marquee.frame;
    frame.origin.x = -50.0f
    marquee.frame = frame;
}]:

这将产生在 5 秒内向左“滚动”选框 50 个像素的效果。您需要调整包含视图的大小以及选取框的宽度。

如果您希望左侧的滚动立即出现在右侧,您可以使用第二个选取框来实现此目的,该选取框的 x 原点从 320 开始,因为第一个选取框的 x 原点为 0。

于 2012-05-11T13:17:24.287 回答
1

它很简单。试试下面的代码,

    [UIView animateKeyframesWithDuration:5 delay:0 options:UIViewKeyframeAnimationOptionRepeat|UIViewAnimationOptionCurveLinear animations:^{
//_mlabel is my created sample label
        _mlabel.frame=CGRectMake(0-(self.view.frame.size.width), _mlabel.frame.origin.y, _mlabel.frame.size.width, _mlabel.frame.size.height);

    } completion:nil];

希望能帮助到你 :)

于 2016-01-27T08:30:21.757 回答