1

我正在使用一些 UIView 动画的东西

[UIView beginAnimations:nil context:nil];
// ... Animation configuration ...
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationEnded:finished:context:)];
[UIView commitAnimations];

关于以下问题:Apple 由于 animationDidStop:finished:context: is an non-public api 而拒绝了应用程序

我将自己的方法实现为“setAnimationDidStopSelector”。

我的问题是关于context:(void *)context参数。苹果将​​其定义如下:

传递给动画委托消息的附加应用程序提供的信息 - 使用 setAnimationWillStartSelector: 和 setAnimationDidStopSelector: 方法设置的选择器。

我想知道什么东西之王可以作为上下文传递。我对 Objective-C 和 C 编程比较陌生,对 void* 类型有点迷茫。

我们可以传入任何类型的参数、对象、NSDictionnary、NSString 等吗?

谢谢

4

2 回答 2

3

void *是指向任何东西的指针。您可以将指针传递给任何对象或其他东西,例如结构或 Core Foundation 不透明类型。要摆脱编译器警告,请将指针转换为void *

... context:(void *)myDictionary];

请注意,该方法不知道context包含什么,因此不会保留它或以其他方式关心正确的内存管理。您必须确保在context调用动画委托方法时传递给的东西仍然存在。

于 2010-10-19T10:30:14.610 回答
0
context:(void *)myDictionary];

调用此方法并尝试通过时

(void *)[NSNumber numberWithInt:5] - 

由于从 C 到 Objective-C 的无效指针转换,xCode 建议制作一些 _bridge ...

于 2013-02-11T13:16:39.427 回答