モーダル ウィンドウのように表示/非表示にする UISegmentedControl があります。最初は、選択されたセグメントがありません。IB では、Value Changed イベントがメソッド (IBAction)cardClassificationChanged:(UISegmentedControl *)sender に関連付けられています。その方法は次のとおりです。
- (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 の選択を更新するには、何を呼び出す必要がありますか?