0

我有一个 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 选择?

4

1 回答 1

0

我建议你应该使用 UIKit 动画来淡出你的控制。试试下面的代码

- (void)hideWithAnimation
{
    [UIView animateWithDuration:0.2
                 animations:^{
                     self.alpha = 0.;
                 } completion:^(BOOL finished) {
                     self.alpha = 1.;
                     self.hidden = YES;
                 }];
}
于 2013-01-08T15:11:10.077 回答