我的时间线应用程序控件遇到了另一个问题。
我的TimelineView上有一定数量的UILabels,它继承自UIView。
我实现了一个滚动功能,它工作得很好。当一个元素到达底部时,它会被删除,并在第一个元素上方添加另一个 UILabel,反之亦然。类委托(delegate)中有一个标签数组,其中存储和删除所有 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 和例如添加删除的标签层,以便启动的动画可以用新的标签恢复?
如果这些事情不可能:是否有另一种方法可以实现这样的缓出动画,而无需实现全新的动画?
很难解释它到底是什么样子,但我希望我能正确描述我的问题,并且有人能够帮助我。
问候,
阿斯加罗斯
最佳答案
听起来您只是希望动画在某些情况下在不同的 y 位置完成。执行此操作的简单方法(如果我正确理解问题)是计算要删除标签的 y 位置,在那里设置动画,然后添加...
[UIView setAnimationDidStopSelector:@selector(removeFromSuperview)];
你说“低于框架高度”。这是标签的 super View 的框架高度吗?如果是,将label.frame.origin.y
的结束位置设置为label.superview.bounds.size.height
关于iphone - 使用 UIView 动画时处理、删除和添加 UILabels,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15297181/