Iphone - how to pass a parameter to animationDidStop?(IPhone--如何向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传递参数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:IPhone--如何向AnimationDidStop传递参数?


猜你喜欢
- MalformedJsonException:在第1行第1列路径中使用JsonReader.setLenient(True)接受格式错误的JSON 2022-01-01
- 在测试浓缩咖啡时,Android设备不会在屏幕上启动活动 2022-01-01
- android 4中的android RadioButton问题 2022-01-01
- 如何检查发送到 Android 应用程序的 Firebase 消息的传递状态? 2022-01-01
- 使用自定义动画时在 iOS9 上忽略 edgesForExtendedLayout 2022-01-01
- 用 Swift 实现 UITextFieldDelegate 2022-01-01
- Android - 拆分 Drawable 2022-01-01
- Android - 我如何找出用户有多少未读电子邮件? 2022-01-01
- Android viewpager检测滑动超出范围 2022-01-01
- 想使用ViewPager,无法识别android.support.*? 2022-01-01