2010-08-11 72 views
4

蘋果拒絕我的應用程序,因爲:蘋果拒絕,因爲animationDidStop的應用程序:成品:背景:在非公開的API

3.3.1應用程序只能在蘋果規定的方式使用記錄的API,切莫使用或調用任何私人API。 應用程序必須最初寫在Objective-C,C,C++,或 的JavaScript由iPhone OS WebKit引擎作爲執行,並且只用C,C++代碼 和Objective-C可以編譯和直接鏈接 針對所記錄的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]; 

} 

我使用這個方法來顯示特定事件的occurence後滑動消息。

但我沒有定義這種方法。當我試圖找到它時,只能在CAAnimation.h,UIView.h中找到它。

有沒有人遇到同樣的問題?你怎麼修好它的?

+0

當你說'我沒有定義這個方法'時,你是什麼意思? – lukya 2010-08-11 06:43:36

+0

我沒有寫這個方法的定義。我試圖找出可能包含此定義的靜態庫。 – neha 2010-08-11 06:52:06

回答

7

setAnimationDidStopSelector:整點是,你告訴系統調用自己的自定義的方法當動畫完成。所以,如果你打算在選擇傳給你需要定義一個方法,在你的類自己:

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

注爲setAnimationDidStopSelector:的文件說,你必須使用這種形式的選擇,但在現實中,你也可以使用像描述的瘋狗一樣的較短的一個。但是,最好獲取動畫ID和上下文以及其他項目來檢查。

您需要將該方法添加到代碼所在的任何類中,因爲您將自己作爲動畫委託進行傳遞。

由於某種原因,它們可能也具有相同名稱的內部UIView方法,這就是爲什麼您被指控使用未公開的API。

+0

該郵件還說:「如果您在源代碼中定義了一個與上述API名稱相同的方法,我們建議更改您的方法名稱,以使其不會更長時間與蘋果的私有API相沖突,以避免您的應用程序被未來的提交標記。「那麼如果我用它的東西定義方法,它會不會與Apple的私有API方法相沖突? – neha 2010-08-11 07:55:02

+1

您可以將其命名爲myanimationDidStop:(NSString *)animationID完成:(NSNumber *)完成上下文以確保安全(只要接受的參數類型相同,確切名稱無關緊要)。這很奇怪,因爲我在商店的其他應用程序中使用了相同的方法,也許這是剛添加的新方法。 – 2010-08-11 08:21:24

+0

如果已經使用了兩個以上的動畫,那麼如何識別此選擇器方法,如對象上的標籤屬性。有什麼辦法可以區分這些動畫 – 2011-12-29 08:19:04

5

如果您需要在動畫完成時執行某些操作(如釋放對象),則應定義自己的方法,然後將選擇器傳遞給UIView setAnimationDidStopSelector。

例如:

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

然後設置動畫的時候你會做

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

Thanx mad-dog-software ..它幫助.. – neha 2010-08-11 07:50:11

相關問題