IPhone--如何向AnimationDidStop传递参数? [英] Iphone - how to pass a parameter to animationDidStop?

查看:53
本文介绍了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传递参数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆