2014-03-25 23 views
-1

我喜歡使用animateWithDuration:options:completion。我碰到過幾種情況,我可以在沒有動畫的情況下真正將它用於我自己的場景,但是我很難編寫方法體。顯然,我不能只看UIView的代碼,只是它的簽名。具有完成塊的通用Obj-C方法的方法體

這裏是我的嘗試(也許是我的方法簽名全亂了太):

.h 
+(void)performGenericBlock:(void(^)(BOOL))code actionWhenDone:(void(^)(void))action; 

.m 
+(void)performGenericBlock:(void(^)(BOOL))code actionWhenDone:(void(^)(void))action 
{ 
    //Kind of lost here - here is psuedocode 
    [do stuff:^(BOOL done){action}]; 
} 

基本上我要完成:

執行的一個代碼塊,當它完成,做第二塊代碼。

+0

如果我錯過了某些東西以使此問題更清楚,請留下評論和說明等你投票時我怎麼能改進它。 –

回答

0

不確定爲什麼你需要兩個參數,你應該能夠在原始塊中寫入代碼。

在以下示例中,假設我們要先調用[self.test foo1],然後調用[self.test foo2]。

最簡單的解決方案是根本不創建新的方法。只需致電您的代碼:

[self.test foo1]; 
[self.test foo2]; 

foo2將在foo1之後執行。

第二個最簡單的解決方案是隻使用一個參數創建函數:

[ViewController performGenericBlock:^{ 
    [self.test foo1]; 
    [self.test foo2]; 
}]; 

如果你真的需要2個參數,你會做以下幾點:

[ViewController performGenericBlock:^{ 
    [self.test foo1]; 
} actionWhenDone:^{ 
    [self.test foo2]; 
}]; 

...和定義方法是這樣的:

+ (void)performGenericBlock:(void(^)(void))code actionWhenDone:(void(^)(void))action { 
    code(); 
    action(); 
} 
+0

這看起來像我要去的。基本上,當我想到這一點時,我在safari中打開了一個URL ......並且想要在完成時更改一些UI內容。謝謝你的幫助,測試和工作,並會在SO讓我接受。 –