Apple拒绝了我的应用,因为:
3.3.1应用程序只能以Apple规定的方式使用Documented API,不得使用或调用任何私有API。 应用程序必须最初使用Objective-C,C,C ++或 JavaScript由iPhone OS WebKit引擎执行,只有代码 用C,C ++和Objective-C编写的可以编译并直接链接 针对Documented API(例如,链接到的应用程序) 通过中间翻译或兼容性记录API 层或工具是禁止的。)
您的应用程序中包含的非公共API为animationDidStop:finished:context:
。
这是我使用上述方法调用的方法:
- (void)hideMsg
{
// Slide the view off screen
CGRect frame = self.view.frame;
int retractY;
int retractX;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:.75];
retractY = -190;
retractX = 0;
frame.origin.y = retractY;
frame.origin.x = retractX;
self.view.frame = frame;
//to autorelease the Msg, define stop selector
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
[UIView commitAnimations];
}
我正在使用此方法在某个事件发生后显示滑动消息。
但我没有定义这种方法。当我试图找到它时,只能在CAAnimation.h,UIView.h。
中找到它有没有人遇到同样的问题?你是怎么解决的?
答案 0 :(得分:7)
setAnimationDidStopSelector:
的重点在于告诉系统在动画完成时调用自己的自定义方法。所以,如果要传入该选择器,则需要自己在类中定义该方法:
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
{
// do whatever.
}
请注意setAnimationDidStopSelector:
的文档说你必须使用这种形式的选择器,但实际上你也可以使用像mad-dog描述的更短的选择器。但是,最好让animationID和context以及其他项目进行检查。
您需要将该方法添加到代码所在的任何类中,因为您将self作为动画委托传递。
由于某些原因,它们可能也有一个同名的内部UIView方法,这就是为什么你被指责使用未记录的API。
答案 1 :(得分:5)
如果您需要在动画完成后执行某些操作(如释放对象),则应定义自己的方法,然后将选择器传递给UIView setAnimationDidStopSelector。
例如:
-(void) messageSlideFinished { // do some stuff here }
然后在设置动画时你会做
[UIView setAnimationDelegate:self]; [UIView setAnimationDidStopSelector:@selector(messageSlideFinished)];
答案 2 :(得分:-1)
animationDidStop
是an iOS delegate。您应该为自己的selector
使用其他名称。