2013-01-08 79 views
0

我有一個UISegmentedControl顯示/隱藏像模態窗口。最初它沒有選定的細分市場。在IB中,Value Changed事件連接到方法 - (IBAction)cardClassificationChanged:(UISegmentedControl *)發送者。下面是一個方法:UISegmentedControl選擇不動畫之前更新

- (IBAction)cardClassificationChanged:(UISegmentedControl *)sender 
{ 
    NSLog(@"%d", sender.selectedSegmentIndex); 
    // block for updating the categorization of current card asynchronously 
    [self.cardActionSheet hideWithAnimation]; 
} 

如果我註釋掉最後一行(調用-hideWithAnimation),按預期的方式選擇更改,一切正常。但是,通過調用該動畫方法,在動畫之前,UISegmentedControl選擇不會在視覺上發生變化。下面是hideWithAnimation方法:將出現此圖(從觸摸手勢)下一次

- (void)hideWithAnimation 
{ 
    CATransition *animation = [CATransition animation]; 
    animation.type = kCATransitionFade; 
    animation.duration = globalAnimationLength; 
    [self.layer addAnimation:animation forKey:nil]; 

    self.hidden = YES; 
} 

,所述UISegmentedControl將有雖然選擇了正確的片段。

看來我不應該爲UISegmentedControl調用setNeedsDisplay,但即使在cardClassificationChanged方法或hideWithAnimation方法中嘗試它時,它也不會刷新。

我很明顯缺少與UI更新相關的內容,在動畫之前需要調用哪些更新UISegmentedControl選項?

+1

的方法'-hideWithAnimation'從來不會叫'-cardClassificationChanged:','-hideCardActionSheet:'叫代替。你能否檢查複製的代碼並修復它? –

+0

你是對的,抱歉的混亂。 -hideCardActionSheet有一些其他邏輯/處理,然後調用-hideWithAnimation。當我能夠回到那臺機器時,我會進行更新。目前,cardClassificationChanged中的動畫或邏輯沒有任何問題,我的問題是UISegmentedControl不會在視覺上更新以反映選擇。 – aaronfalls

+0

@ A-Live編輯,謝謝你指出。 – aaronfalls

回答

0

我建議你應該使用UIKit動畫來淡出你的控制。試試下面的代碼

- (void)hideWithAnimation 
{ 
    [UIView animateWithDuration:0.2 
       animations:^{ 
        self.alpha = 0.; 
       } completion:^(BOOL finished) { 
        self.alpha = 1.; 
        self.hidden = YES; 
       }]; 
} 
+0

使用這個基於塊的動畫解決了這個問題,並且是更現代的代碼:)非常感謝。 (爲了我自己的理解),您可以提供關於爲什麼UISegmentedControl不會使用CATransition方法更新的任何參考或評論。 – aaronfalls

+1

@afalls它必須是線程相關的,如果你用'[self performSelector:@selector(hideWithAnimation :) withObject:sender afterDelay:0]調用動畫;'(從主線程當然,關鍵是延遲,即使它是零),它可以很好地處理'CATransition' –