Iphone - how to pass a parameter to animationDidStop?(IPhone--如何向AnimationDidStop传递参数?)
问题描述
我有这个方法...
- (void) helloThere: (int) myValue {
// I am trying to pass myValue to animationDidStop
[UIView beginAnimations:nil context:[NSNumber numberWithInt: myValue]];
[UIView setAnimationDuration:1.0];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
[UIView setAnimationDelegate:self];
// do stuff
[UIView commitAnimations];
}
然后,我正在尝试检索AnimationDidStop上的myValue...
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
int retrievedValue = (int)context; //??? not giving me the right number
}
但RetriedValue给了我一个与原始myValue无关的数字...
如何检索该号码?
谢谢您的帮助。
推荐答案
有关如何获取整数的信息,请参阅@DyingCactus的答案。
然而,op的代码在上下文中有一个严重的问题。由于上下文类型为void*
,因此UIKit不会期望您向其传递Objc对象,因此不会保留NSNnumber。
因此,当您执行
[(NSNumber*)context intValue];
在AnimationDidStop中,几乎可以肯定你会得到一些疯狂的数字或崩溃。
有两种类似的方法来解决这个问题。
(A)传递保留计数为+1的对象,并在AnimationDidStop:
中释放[UIView beginAnimations:nil context:[[NSNumber alloc] initWithInt:myValue]];
....
int retrievedValue = [(NSNumber*)context intValue];
[(NSNumber*)context release];
(B)传递malloc
内存,free
在AnimationDidStop:
int* c = malloc(sizeof(*c));
*c = myValue;
[UIView beginAnimations:nil context:c];
....
int retrievedValue = *(int*)context;
free(context);
这篇关于IPhone--如何向AnimationDidStop传递参数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!