2016-06-15 64 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 = @""; 
    } 

}