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传递参数?
基础教程推荐
猜你喜欢
- Android:getLastKnownLocation(LocationManager.NETWORK_PROVIDER 2022-01-01
- libGDX 从精灵或纹理中获取像素颜色 2022-01-01
- 如何从 logcat 中删除旧数据? 2022-01-01
- NSString intValue 不能用于检索电话号码 2022-01-01
- iOS4 创建后台定时器 2022-01-01
- navigator.geolocation.getCurrentPosition 在 Android 浏览器上 2022-01-01
- iPhone - 获取给定地点/时区的当前日期和时间并将其与同一地点的另一个日期/时间进行比较的正确方法 2022-01-01
- AdMob 广告未在模拟器中显示 2022-01-01
- 通过重定向链接在 Google Play 中打开应用 2022-01-01
- Cocos2d iPhone 非矩形精灵触摸检测 2022-01-01
