2013-06-01 72 views
1

我寫使用動畫文本可可控制的應用程序,的NSTimer scheduledTimerWithTimeInterval和CoreAnimation

https://www.cocoacontrols.com/controls/marqueelabel

它採用CoreTextQuartzCore

這是一個很好的控制,但我有麻煩。 當實例化我使用控件創建的動畫標籤立即開始滾動,但是我發現當我使用NSTimer創建動畫標籤時,它不是動畫。 我使用

- (void)viewDidLoad 
{ 

    [super viewDidLoad]; 

    .... 
    [self.view addSubview:continuousLabel1]; 
    [NSTimer scheduledTimerWithTimeInterval:5 
               target:self 
               selector:@selector(updatePrice) 
               userInfo:nil repeats:YES]; 


} 

但調用創建動畫標籤的方法,當我調用該方法直接在標籤製作和動畫,使用上述計劃的計時器調用時,只有創造了新的標籤動畫第一調用,而不是定時器重複調用該方法。 我檢查了我的方法正在調用主線程/主runloop,任何想法?

爲了清楚的工作流程是:

定時器調用方法 - >標籤1被創建並開始動畫。

5秒晚...

定時器再次調用方法 - >標籤2創建但是就是沒有開始動畫預期。

編輯:

- (void)updatePrice 
{ 


     MarqueeLabel *continuousLabel2 = [[MarqueeLabel alloc] initWithFrame:CGRectMake(10, 230, self.view.frame.size.width-20, 20) rate:100.0f andFadeLength:10.0f]; 
     continuousLabel2.tag = 101; 
     continuousLabel2.marqueeType = MLContinuous; 
     continuousLabel2.animationCurve = UIViewAnimationOptionCurveLinear; 
     continuousLabel2.continuousMarqueeExtraBuffer = 50.0f; 
     continuousLabel2.numberOfLines = 1; 
     continuousLabel2.opaque = NO; 
     continuousLabel2.enabled = YES; 
     continuousLabel2.shadowOffset = CGSizeMake(0.0, -1.0); 
     continuousLabel2.textAlignment = NSTextAlignmentLeft; 
     continuousLabel2.textColor = [UIColor colorWithRed:0.234 green:0.234 blue:0.234 alpha:1.000]; 
     continuousLabel2.backgroundColor = [UIColor clearColor]; 
     continuousLabel2.font = [UIFont fontWithName:@"Helvetica-Bold" size:17.000]; 
     continuousLabel2.text = @"This is another long label that doesn't scroll continuously with a custom space between labels! You can also tap it to pause and unpause it!"; 

     [self.view addSubview:continuousLabel2]; 

    if([NSThread isMainThread]) 
    { 
     NSLog(@"In Main Thread"); 
    } 
    if ([NSRunLoop currentRunLoop] == [NSRunLoop mainRunLoop]) { 
     NSLog(@"In Main Loop"); 
    } 


} 
+1

昨天我只給出了答案[marquee](http://stackoverflow.com/questions/16860254/how-to-make-marquee-uilabel-uitextfield-nstextfield/16860529#16860529) –

+1

你甚至讀過題?我確切知道如何創建一個選框,我的問題不是重複的,甚至與您所建議的相似。當標籤由NSTimers重複調用實例化時,標籤上的動畫不會發生。 – Woodstock

+0

因爲你的問題沒有在代碼中顯示,我認爲答案會對你有所幫助。我看到的一個區別是有一個屬性啓動並使計時器失效。在你的情況下,我不知道你在哪裏和多少次調用myMethod ....鏈接和欺騙可以達到你想要的80-100%。 –

回答

1

您應該閱讀自述文件中的Important Animation Note部分。

我的猜測是,您需要調用controllerLabelsShouldAnimate:傳遞您當前的視圖控制器來爲在已經顯示視圖控制器後添加的標籤設置動畫。

+0

謝謝!你已經解決了我的問題!問題在於MarqueeLabel基於UIView動畫,當視圖出現和消失時,會導致一些問題,重複動畫被iOS停止並且不會自動重新啓動。在這種情況下,我沒有改變視圖,但不知何故按計時器添加標籤似乎會導致動畫問題。此代碼'MarqueeLabel controllerViewAppearing:self];''解決了我的問題!謝謝! PS。 rptwsthi,很快,Roman C,Graviton這個問題不是重複。如果你花更多的時間幫助和更少的時間尋找點,你可能已經注意到 – Woodstock

+0

yonosoytu - 我會upvote你的答案,但由於任意限制,我不能。也許其中一個將其標記爲不恰當的愚蠢行爲的有幫助的chaps可能能夠爲我讚不絕口。 – Woodstock

2

的問題是,您所呼叫updatePrice每5秒,在這種方法你正在創建一個新的標籤,那就是堆積起來,並注意它會變暗並且每5秒更黑。

如果您檢查標籤是否滾動。

解決方案:

如果你想在標籤的多個實例,改變它的座標。

如果你想單個實例,然後比較檢查並只創建一次。

+0

嗨Anoop!感謝您的幫助,既然您擁有該項目,您就可以看到我的問題,我知道標籤堆疊,如果您關閉不會堆疊的定時器重複,那沒關係,因爲這只是一個示例項目,我的問題是頂部的標籤是滾動的,但底部的標籤不會滾動給我!看看這個截圖,看看我的意思,並再次感謝你的時間...謝謝你,先生,http://i.imgur.com/J36jDb5.png – Woodstock

+0

在這裏我已經打開了關於定時器的重複,仍然創建的第二個標籤不生成動畫! – Woodstock

+0

點擊ios similator的按鈕,然後點擊應用程序,它會開始動畫。 –

相關問題