2013-03-08 58 views
0

我的控件對於時間軸應用程序有另一個問題。使用UIView動畫時處理,刪除和添加UILabels

有我TimelineView從UIView的herited UILabels一定量。

我實現了一個滾動功能,它的工作原理相當精細。當一個元素到達底部時,它被刪除,另一個UILabel被添加到第一個和其他方式之上。在類委託中有一個標籤數組,其中所有的UI標籤(TimeLabels)被存儲和刪除。小時/天等 - 動態加載,以便內存使用率將會很低)

現在我想在釋放觸摸提示(通過touchesEnded)後以一定的速度正確計算出一個緩解動畫。使用UIView動畫效果相當不錯:

speed/=3; 
for(TimeLabel *movingLabel in self.delegate.labels){ 
    NSLog(@"%i",movingLabel.time); 
    [UIView beginAnimations:@"" context:NULL]; 
    [UIView setAnimationDuration:2.0]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 


    CGRect movingFrame = [[movingLabel.layer presentationLayer] frame]; 
    NSLog(@"%f",movingFrame.origin.y); 

    movingLabel.frame = CGRectMake(7, movingLabel.frame.origin.y+speed, 200, 25); 

    [UIView commitAnimations]; 

} 

所有標籤的動畫都是正確完成的。

時,我想擴大我的方法(上面沒有顯示),因此,當一個標籤的位置下降到應用程序框架的高度下,它不會被丟棄(即使使用了表示層,而根據其他人,是一個動畫時獲得當前位置的可能性,但它只顯示記錄時每個標籤的位置...)。

所以我的問題:它甚至有可能通過檢查它的位置,同時其動畫刪除一個UILabel?與這個問題一樣重要:是否可以插入一個新的UILabel,例如添加已刪除的標籤圖層,以便可以使用新圖層繼續啓動的動畫?

如果這些事情是不可能的:是否有另一種方式來實現緩出的動畫一樣,沒有實現一個全新的動畫?

這是一個有點難以解釋它是如何準確地應該看起來像,但我希望我能正確地描述我的問題,還有人誰是能夠幫助我。

問候,

Âsgaroth

+0

你應該嘗試與UIView的動畫屬性一起移動的for循環的開始和提交外面。 – shoughton123 2013-03-08 15:36:07

+0

沒有改變它。感謝tipp無論如何 – 2013-03-08 15:50:45

+0

啊右是值得一試任何一種方式,雖然它更有效地把開始和提交以外的for循環:) – shoughton123 2013-03-08 15:55:26

回答

1

這聽起來像你只是希望動畫在某些情況下,不同的y位置完成。最簡單的方法來做到這一點(如果我理解正確的問題)是計算在要刪除的標籤y位置,動畫到那裏,並添加...

[UIView setAnimationDidStopSelector:@selector(removeFromSuperview)]; 

你說「下面下降框架高度「。這是標籤的超級視圖的框架高度嗎?如果是的話,設置label.frame.origin.y結束位置label.superview.bounds.size.height

+0

聽起來很有希望!生病嘗試它在星期一感謝 – 2013-03-09 16:32:06

+0

嘗試在當時似乎是我最好的解決方案。非常感謝你! – 2013-03-11 12:04:12

+0

很高興聽到。你能標記答案正確嗎?謝謝。 – danh 2013-03-11 14:04:35

相關問題