2016-06-15 60 views
1

我想制作一个标签,其文本从“加载” - >“加载”更改。 - >“加载..” - >“加载...”动态和只要该标签存在。如何使动态更改和循环文本的UILabel?

所以我刚创建了一个标签,并添加了一个我称之为animateDots的函数,它只是不断调用自己。我已经完成了使用UIView.animateWithDuration()和每个完成块调用另一个animateWithDuration(),直到它只是调用animateDots()等。但是这并不奏效,因为UILabel中的文本不具备动画效果,所以它只是非常快速地为所有四个标签制作动画。我希望它变慢。

我试过UIView.preformWithoutAnimation,我也试过UIView.beginAnimations但我不记得animateDots()而不会导致应用程序崩溃。我不知道还有什么可以尝试的

编辑:感谢@ 7vikram7的建议,我解决了这个问题。

我在初始化标签后立即创建了定时器,定时器重复。每当定时器完成一个循环时,它就会运行一个选择器,在这种情况下,该选择器将更改文本。在代码:

loading = UILabel(frame: CGRectMake(0,0,80,50)) 
loading.text = "Loading" 
let timer = NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: 
      #selector(LoadingCell.animateDots), userInfo: nil, repeats: true) 
     timer.fire() 

然后添加此功能:

func animateDots() { 
     switch (loading.text!) { 
     case "Loading...": 
      loading.text = "Loading" 
     case "Loading": 
      loading.text = "Loading." 
     case "Loading.": 
      loading.text = "Loading.." 
     case "Loading..": 
      loading.text = "Loading..." 
     default: 
      loading.text = "Loading" 
     } 
    } 
+0

可以使用的NSTimer不是时候。以2或3秒的间隔重复计划一个计时器。 https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSTimer_Class/ – 7vikram7

+0

啊,这真是个好主意!我会去做。谢谢。 – QuantumHoneybees

+0

你可以在这里添加一些代码吗? –

回答

0

您还可以创建4个图像这样的,你可以设置

,每当你想启动动画过程中添加这动画为uiimageview。它给出了你想要的结果。

0

MarqueeLabel可以帮你稍加修改实现这一目标。您可以使您的加载文本不同的标签,并使您的文字MarqueeLabel或您完全使所有三个点不同的标签分别隐藏和取消隐藏它们。后者是一种非常乏味的方法,并且非常不推荐,因此首先使用。

pod MarqueeLabel 

MarqueeLabel提供此功能。根据您的要求

@IBOutlet weak var lblLocation: MarqueeLabel! 

设置属性:您的标签的类名正好被设置为MarqueeLabel为

  1. 时间
  2. FadeLength
  3. MarqueeType
2

复制过去进入你的项目并改变计时器的值和秒

开始计时,当你想要的文字动画,并停止使用

NSTimer *myticker = [NSTimer scheduledTimerWithTimeInterval:(set your time) target:self selector:@selector(showActivity) userInfo:nil repeats:YES]; 

-(void)showActivity { 

    second=second-0.5; // set your second 

    if (second <= 0) { 
     [myticker invalidate]; 

    } 


    if (second >= 5) { 
     if ([connectingLabel.text isEqualToString:@"Connecting."]) { 
      connectingLabel.text = @"Connecting.."; 

     }else if ([connectingLabel.text isEqualToString:@"Connecting.."]) { 
      connectingLabel.text = @"Connecting..."; 

     }else if ([connectingLabel.text isEqualToString:@"Connecting..."]) { 
      connectingLabel.text = @"Connecting."; 
     }else{ 
      connectingLabel.text = @"Connecting."; 

     } 
    }else{ 
     connectingLabel.text = @""; 
    } 

}