0

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

我的 TimelineView 上有一定数量的 UILabel 继承自 UIView。

我实现了一个滚动功能,它工作得很好。当一个元素到达底部时,它会被删除,并在第一个元素上方添加另一个 UILabel,反之亦然。Classes 委托中有一个标签数组,其中存储和删除所有 UIlabels(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];

}

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

但是当我想扩展我的方法(上面未显示)时,当标签的位置低于应用程序的框架高度时,它不会被丢弃(即使使用presentationLayer,根据其他人的说法,它有可能获得当前位置动画时。但它只在记录时显示每个标签的结束位置......)。

所以我的问题是:甚至可以通过在制作动画时检查它的位置来删除 UILabel 吗?和这个问题一样重要:是否可以插入一个新的 UILabel 并添加删除的标签层,以便开始的动画可以用新的动画恢复?

如果这些事情是不可能的:是否有另一种方法可以在不实现全新动画的情况下实现这样的缓动动画?

很难解释它应该是什么样子,但我希望我能正确描述我的问题,并且有人能够帮助我。

问候,

斯加罗斯

4

1 回答 1

1

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

[UIView setAnimationDidStopSelector:@selector(removeFromSuperview)];

你说“低于框架高度”。那是标签超级视图的框架高度吗?如果是这样,将结束位置设置label.frame.origin.ylabel.superview.bounds.size.height

于 2013-03-08T15:52:39.983 回答