Apple отклонила приложение из-за animationDidStop: закончено: контекст: это непубличный API - PullRequest
4 голосов
/ 11 августа 2010

Apple отклонила мое приложение, потому что:

3.3.1 Приложения могут использовать документированные API только в порядке, установленном Apple, и не должны использовать или вызывать какие-либо частные API.Первоначально приложения должны быть написаны на Objective-C, C, C ++ или JavaScript, как они выполняются механизмом WebKit iPhone OS, и только код, написанный на C, C ++ и Objective-C, может компилироваться и напрямую ссылаться на документированные 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 ]

7 голосов
/ 11 августа 2010

Весь смысл setAnimationDidStopSelector: в том, что вы говорите системе вызывать ваш собственный метод при завершении анимации. Итак, если вы собираетесь передать этот селектор, вам нужно определить этот метод в вашем классе:

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

Обратите внимание, что в документации для setAnimationDidStopSelector: сказано, что вы должны использовать селектор этой формы, но в действительности вы также можете использовать более короткий, как описанный mad-dog. Но лучше использовать анимационный идентификатор, контекст и другие элементы для изучения.

Вам необходимо добавить метод в любой класс, в котором находится этот код, потому что вы передаете себя в качестве делегата анимации.

Возможно, по какой-то причине у них также есть внутренний метод UIView с тем же именем, поэтому вас обвиняют в использовании недокументированного API.

5 голосов
/ 11 августа 2010

Если вам нужно выполнить какое-либо действие (например, освободить объекты) после завершения анимации, вы должны определить свой собственный метод, а затем передать селектор для него в UIView setAnimationDidStopSelector.

Например:

-(void) messageSlideFinished {
 // do some stuff here
}

Затем при настройке анимации вы должны сделать

[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(messageSlideFinished)];
0 голосов
/ 11 августа 2010

animationDidStop - это делегат iOS .Вы должны использовать другое имя для своего selector.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...