Iphone 使用UIView动画时处理、删除和添加UILabel

Iphone 使用UIView动画时处理、删除和添加UILabel,iphone,ios,scroll,uilabel,uiviewanimation,Iphone,Ios,Scroll,Uilabel,Uiviewanimation,我的时间轴应用程序控件出现另一个问题 在我的TimelineView上有一定数量的UILabel,它是从UIView中继承的 我实现了一个滚动功能,效果很好。当一个元素到达底部时,它将被删除,另一个UILabel将被添加到第一个UILabel的上方,反之亦然。类委托中有一个labels数组,其中存储和删除了所有UILabel(TimeLabel)。(对于以后实现小时/天等非常重要-动态加载,以降低内存使用率) 现在,我想在释放触摸手势(通过touchesEnded)后,以一定的速度(正确计算)制

我的时间轴应用程序控件出现另一个问题

在我的TimelineView上有一定数量的UILabel,它是从UIView中继承的

我实现了一个滚动功能,效果很好。当一个元素到达底部时,它将被删除,另一个UILabel将被添加到第一个UILabel的上方,反之亦然。类委托中有一个labels数组,其中存储和删除了所有UILabel(TimeLabel)。(对于以后实现小时/天等非常重要-动态加载,以降低内存使用率)

现在,我想在释放触摸手势(通过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];

}
所有标签的动画都已正确完成

但是当我想扩展我的方法(上面没有显示)时,标签的位置下降到应用程序的框架高度以下时,它不会下降(即使使用presentationLayer,根据其他人的说法,也有可能在制作动画时获得当前位置。但它只在记录时显示每个标签的结束位置…)

因此,我的问题是:在设置UILabel动画时,是否可以通过检查其位置来删除UILabel?与此问题同样重要的是:是否可以插入新的UILabel,例如添加已删除的标签层,以便开始的动画可以用新的一个继续

如果这些都是不可能的:有没有其他方法可以在不实现全新动画的情况下实现这样的轻松动画

要解释它到底是什么样子有点困难,但我希望我能恰当地描述我的问题,并且有任何人能够帮助我

您好


sgaroth

在某些情况下,听起来您只是希望动画在不同的y位置完成。实现这一点的简单方法(如果我正确理解了这个问题)是计算要删除标签的y位置,将其设置为动画,然后添加

[UIView setAnimationDidStopSelector:@selector(removeFromSuperview)];

你说“下降到框架高度以下”。这是标签的superview的帧高吗?如果是,请将
label.frame.origin.y
的结束位置设置为
label.superview.bounds.size.height

您应该尝试将begin和commit与UIView动画属性一起移动到for循环的外部。没有更改它。无论如何,感谢tipp。正确是值得的尽管将begin和commit放在for循环之外要有效得多,但尝试两种方式都是:)在尝试似乎是当时对我来说最好的解决方案。非常感谢你!