2017-09-21 20 views
0

我想讓我的數組中的每個項目每秒都有UILabel更改文本(更改後淡入淡出),然後在最後再次通過它。我曾嘗試過:如何從NSArray中的每個項目每秒都有一個UILabel更改文本然後再次旋轉?

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:YES]; 
    NSArray *arrayOfText = @[@"Test1",@"Test2",@"Test3",@"Test4"]; 

    for (int i = 0; i < [arrayOfText count]; i++) { 

     [NSThread sleepForTimeInterval:2.0f]; 

     self.changingTextLabel.text = [arrayOfText objectAtIndex:i]; 

    } 


} 

這將加載ViewController,約8秒後將文本更改爲數組中的最後一項。

我在做什麼錯?有一個更好的方法嗎?過去幾天我一直在尋找解決方案,而且沒有任何解決方案適用於我。謝謝!

回答

1

永不睡在主隊列中。它阻止了你的應用程序的用戶界面。

你有幾個選擇,但使用NSTimer可能是最簡單的。

添加了幾個實例變量到類:

@implementation WhateverViewController { 
    NSTimer *_labelTimer; 
    NSInteger labelIndex = 0; 
} 

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:YES]; 

    NSArray *arrayOfText = @[@"Test1",@"Test2",@"Test3",@"Test4"]; 

    // Setup a timer to run every 2 seconds and update the label 
    // Increment the labelIndex so the next label is shown next time 
    _labelTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 repeats:YES block:^(NSTimer *timer) { 
     self.changingTextLabel.text = arrayOfText[labelIndex]; 
     labelIndex = (labelIndex + 1) % arrayOfText.count; 
    }]; 
} 

- (void)viewDidDisappear:(BOOL)animated { 
    [super viewDidDisappear:animated]; 

    // Stop the timer when we leave 
    [_labelTimer invalidate]; 
    _labelTimer = nil; 
} 

- (void)dealloc { 
    // Make sure it is stopped 
    [_labelTimer invalidate]; 
} 
相關問題