我的Control为时间线应用程序遇到了另一个问题。
我的时间线视图上有一定数量的UILabel,它们来自UIView。
我实现了滚动功能,它工作得很好。当一个元素到达底部时,它被删除,另一个UILabel被添加到第一个上面,反之亦然。在Classes委托中有一个标签Array,其中存储和删除所有UIlabels(TimeLabels)。(后续实现的重要性)小时/天等 - 动态加载以便内存使用量很低)
现在我想在释放touchgesture(通过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,例如添加已删除的标签图层,以便可以使用新的动画恢复已启动的动画吗?
如果这些事情不可能:有没有另外一种方法可以在没有实现全新动画的情况下实现这样的轻松动画?
有点难以解释它应该是什么样子但我希望我能正确描述我的问题,并且有人能够帮助我。
问候,
Âsgaroth
答案 0 :(得分:1)
听起来你只想在某些情况下在不同的y位置完成动画。这样做的简单方法(如果我正确理解了这个问题)是计算你想要移除标签的y位置,在那里设置动画,然后添加......
[UIView setAnimationDidStopSelector:@selector(removeFromSuperview)];
你说"落在框架高度下面#34;。这是标签超级视图的框架高度吗?如果是,请将label.frame.origin.y
的结束位置设置为label.superview.bounds.size.height