我正在使用
做一些UIView动画[UIView beginAnimations:nil context:nil];
// ... Animation configuration ...
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationEnded:finished:context:)];
[UIView commitAnimations];
关于以下问题:Apple rejected app because of animationDidStop:finished:context: is a non-public api
我将自己的方法实现为“setAnimationDidStopSelector”。
我的问题是关于 context:(void *)context 参数。 Apple将其定义如下:
附加应用程序提供 传递给的信息 动画委托消息 - 选择器使用 setAnimationWillStartSelector:和 setAnimationDidStopSelector:methods。
我想知道什么东西可以作为一个上下文传递。我对Objective-C和C编程比较陌生,而且在void *类型方面有点失落。
我们可以传入任何类型的参数,对象,NSDictionnary,NSString等。
由于
答案 0 :(得分:3)
void *
是指向任何事物的指针。您可以将指针传递给任何对象或其他东西,例如struct或Core Foundation opaque类型。要摆脱编译器警告,请将指针强制转换为void *
:
... context:(void *)myDictionary];
请注意,该方法不知道context
包含什么,因此不会保留它或以其他方式关注正确的内存管理。在调用动画委托方法时,您必须确保传递给context
的内容仍然存在。
答案 1 :(得分:0)
context:(void *)myDictionary];
调用此方法并尝试传递
时(void *)[NSNumber numberWithInt:5] -
xCode建议制作一些_bridge,因为无效的指针从C到Objective-C ......