Iphone 捕获已完成动画的UIPicker selectRow通知
我试图捕捉特定的UIPicker动画何时完成 我一直在寻找这个问题的答案,但常见的答案似乎不起作用,即确保selectRow调用位于beginAnimations和Committeanimations调用中。Iphone 捕获已完成动画的UIPicker selectRow通知,iphone,events,animation,uiview,uipickerview,Iphone,Events,Animation,Uiview,Uipickerview,我试图捕捉特定的UIPicker动画何时完成 我一直在寻找这个问题的答案,但常见的答案似乎不起作用,即确保selectRow调用位于beginAnimations和Committeanimations调用中。 问题是,在调用commitAnimations之后,animationFinished几乎立即触发,而在实际动画停止之前很久。 考虑到问题可能是selectRow创建了自己的动画块,而我实际上并没有跟踪我想要的内容,我尝试调用带有动画的selectRow:不希望我自己的动画块会接管选择器的
问题是,在调用commitAnimations之后,animationFinished几乎立即触发,而在实际动画停止之前很久。
考虑到问题可能是selectRow创建了自己的动画块,而我实际上并没有跟踪我想要的内容,我尝试调用带有动画的selectRow:不希望我自己的动画块会接管选择器的动画。这确实使animationFinished在动画结束时触发,但动画本身变得急促 我如何确保我正在跟踪正确的动画,或者我遗漏了什么 任何信息,包括我可能错过的适当文档的简短参考,都将不胜感激 致以最良好的祝愿, M@ 代码如下:
- (void) animationFinished:(NSString *)animationID finished:(BOOL)finished context:(void *)context {
NSLog(@"animation %d stopped",animationID);
}
- (void)animateToRow:(UIPickerView *)pickerView toRow:(NSInteger)row inComponent:(NSInteger)component
{
[UIPickerView beginAnimations:@"1" context:nil];
[UIPickerView setAnimationDelegate:self];
[UIPickerView setAnimationDidStopSelector:@selector(animationFinished:finished:context:)];
[pickerView selectRow:row inComponent:component animated:YES];
[UIPickerView commitAnimations];
}
你在正确的轨道上。在提供的代码中将自己设置为动画代理时,将自己设置为动画块的代理。因为您没有提供动画持续时间,所以didStopSelector将立即启动 没有一种“受支持”的方法可以做到这一点。几乎任何解决方案都不能保证将来兼容 毫无疑问,苹果正在用自己的动画块包装picker动画。您可以进行一些创造性的调试,确定动画的确切持续时间,并对动画块进行硬编码以匹配。一般来说,苹果的UIKit动画都是固定的,不管东西要走多远。(通常约为0.33秒) 我会试试这个。。。 -为UIView创建一个category方法,覆盖setAnimationDuration:并在此方法内设置断点。(在您准备好之前,最好禁用它,因为它会被大量调用。) -调用animateToRow:ToRow:Incomonent:方法时,打开断点,并观察拾取器视图动画块传递的值
像我说的那样设置一个分类方法将有效地消除为UIView动画块设置持续时间的能力,我不能保证不会有任何奇怪的副作用,而且它绝对只用于调试。您的方法是正确的。在提供的代码中将自己设置为动画代理时,将自己设置为动画块的代理。因为您没有提供动画持续时间,所以didStopSelector将立即启动 没有一种“受支持”的方法可以做到这一点。几乎任何解决方案都不能保证将来兼容 毫无疑问,苹果正在用自己的动画块包装picker动画。您可以进行一些创造性的调试,确定动画的确切持续时间,并对动画块进行硬编码以匹配。一般来说,苹果的UIKit动画都是固定的,不管东西要走多远。(通常约为0.33秒) 我会试试这个。。。 -为UIView创建一个category方法,覆盖setAnimationDuration:并在此方法内设置断点。(在您准备好之前,最好禁用它,因为它会被大量调用。) -调用animateToRow:ToRow:Incomonent:方法时,打开断点,并观察拾取器视图动画块传递的值
像我说的那样设置分类方法将有效地消除为UIView动画块设置持续时间的能力,我不能保证不会有任何奇怪的副作用,而且它绝对只用于调试。感谢您快速清晰的回答。虽然我一定会尝试这一点来满足我的好奇心,但它似乎有点太…不支持依赖于实际的应用商店产品。首先也是最重要的一点是,我的问题是确保我没有遗漏一个已知的模式或官方的API方法。如果没有其他人想出一个,而你是说没有,我将不得不找到一个不同的路径或重新考虑使用整个。顺致敬意,M@Thank谢谢你快速清晰的回答。虽然我一定会尝试这一点来满足我的好奇心,但它似乎有点太…不支持依赖于实际的应用商店产品。首先也是最重要的一点是,我的问题是确保我没有遗漏一个已知的模式或官方的API方法。如果没有其他人想出一个,而你是说没有,我将不得不找到一个不同的路径或重新考虑使用整个。向你问好,M@