由于animationDidStop,Apple拒绝了应用程序:完成:context:是一个非公开API

时间:2010-08-11 05:54:59

标签: ios objective-c iphone

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。

中找到它

有没有人遇到同样的问题?你是怎么解决的?

3 个答案:

答案 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)

animationDidStopan iOS delegate。您应该为自己的selector使用其他名称。