苹果因为animationDidStop而拒绝了应用:finished:context:是非公开的api

苹果拒绝了我的应用程序,

3.3.1应用程序只能按照Apple规定的方式使用文档化的API,不得使用或调用任何私有API。 应用程序最初必须由iPhone OS WebKit引擎执行的Objective-C,C,C ++或JavaScript编写,只有使用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]; } 

我使用这种方法来显示某个事件发生后的滑动消息。

但是我没有定义这个方法。 当我试图find它只在CAAnimation.h,UIView.h中find。

有没有人遇到同样的问题? 你怎么修好它的?

setAnimationDidStopSelector:的全部意义在于,当animation完成时,您正告诉系统调用您自己的自定义方法。 所以,如果你打算通过这个select器,你需要在你的类中定义这个方法:

 - (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context { // do whatever. } 

注意setAnimationDidStopSelector:的文档说:你必须使用这种forms的select器,但实际上你也可以使用一个较短的,如描述的疯狗。 但是,最好是获取animationID和上下文以及其他项目。

您需要将该方法添加到代码所在的任何类中,因为您将自己作为animation委托进行传递。

由于某种原因,它们可能也有相同名称的内部UIView方法,这就是为什么你被指责使用未公开的API。

如果你需要在animation完成时执行一些动作(比如释放对象),你应该定义你自己的方法,然后将一个select器传递给UIView setAnimationDidStopSelector。

例如:

 - (void)messageSlideFinished {
  //在这里做一些东西
 }

然后当设置animation,你会做的

 [UIView setAnimationDelegate:self];
 [UIView setAnimationDidStopSelector:@selector(messageSlideFinished)];

animationDidStop是一个iOS代理 。 您应该为自己的selector使用另一个名称。