1

我已經設法實現這個問題的解決方案,但代碼看起來效率相當低,實際上,延遲方法調用是有點麻煩,當他們如果用戶導航到另一個屏幕,則繼續觸發。交錯方法調用/顯示3 UIImageViews更好的方式在延遲序列

基本上我想要一個思想泡泡從角色的頭部出現,但動畫,以便出現一個小泡泡,然後是一個較大的泡泡,一個較大的泡泡仍然存在,最後是包含一個小動畫的主泡泡。我想我可以創建一個大型的動畫,其中氣泡是相同的幀,每幀的一部分

- (void)showMood { 
    animating = TRUE; 
    [self showBubble1]; 
} 

- (void)showBubble1 { 
    bubble1.hidden = FALSE; 
    [self performSelector:@selector(showBubble2) withObject:nil afterDelay:kBubbleDelay]; 
} 

- (void)showBubble2 { 
    bubble2.hidden = FALSE; 
    [self performSelector:@selector(showBubble3) withObject:nil afterDelay:kBubbleDelay]; 
} 

- (void)showBubble3 { 
    bubble3.hidden = FALSE; 
    [self performSelector:@selector(showThoughtBubble) withObject:nil afterDelay:kBubbleDelay]; 
} 

- (void)showThoughtBubble { 
    thoughtBubble.hidden = FALSE; 
    [self startBubbleAnimations]; 
    [self performSelector:@selector(hideThoughtBubble) withObject:nil 

afterDelay:kAnimationDuration * kAnimationRepeatCount]; 
    } 

- (void)hideThoughtBubble { 
    bubble1.hidden = TRUE; 
    bubble2.hidden = TRUE; 
    bubble3.hidden = TRUE; 
    thoughtBubble.hidden = TRUE; 
    [bubbleAnimation stopAnimating]; 
    animating = FALSE; 
} 

:我已經用它自己的方法顯示每個氣泡,然後調用具有時滯的方法來管理這包含更多的泡泡,但我希望能夠在界面生成器中移動泡泡,而且這種方法不提供很大的靈活性。

任何想法將非常感激。

感謝,

邁克爾

回答

0

可能有更好的方法來做到這一點的序列,但一個簡單的改進將是檢查,看看是否看法是,在更改前可見。如果這樣的觀點已取代另一種觀點認爲,這些都將停止:

- (void)showBubble1 { 
    if (bubble1.window) { // check to see if view is visible 
     bubble1.hidden = NO; 
     [self performSelector:@selector(showBubble2) withObject:nil afterDelay:kBubbleDelay]; 
    } 
} 

而且,我不知道你用這個開始什麼的線程,但要確保它是在主線程上。 UI調用只能在主線程中完成。您可以使用performSelectorOnMainThread:方法之一在主線程上啓動它。