4

我有两个按钮图像:一个用于正常状态,一个用于选定状态。当我从选定状态更改回正常状态时,我希望在几秒钟内出现交叉淡入淡出效果。

到目前为止,我正在使用两个 UIView 动画:第一个在选定状态下从 1.0 的 alpha 到 0.5 的 alpha。然后我切换到正常状态并执行第二个 UIView 动画,从 0.5 的 alpha 到 1.0 的 alpha。

我对视觉效果(从选定图像到正常图像的突然过渡)并不感到兴奋。我还读到 UIView 不应再使用。那么这里的正确方法是什么?代码示例也将非常有用。

4

3 回答 3

2

对我来说,这很有效:

[UIView transitionWithView: button duration: 4.0 options: UIViewAnimationOptionTransitionCrossDissolve animations: ^{
    [button setSelected: !button.isSelected];
} completion: nil];

但这在我将以下三个调用设置为相同时才有效UIImageUIControlStateHighlighted留下一个电话对我不起作用):UIControlStateSelected

[button setImage: img forState: UIControlStateSelected | UIControlStateHighlighted];
[button setImage: img forState: UIControlStateSelected];
[button setImage: img forState: UIControlStateHighlighted];
于 2015-10-14T14:53:00.600 回答
1

以下内容非常简单,将在 4 秒内从选中状态转换为未选中状态。唯一的问题是,当按钮同时移动时,过渡效果不佳。

    button.selected = TRUE;
    CATransition *transition = [CATransition animation];
    transition.duration = 4.0;
    transition.type = kCATransitionFade;
    transition.delegate = self;
    [button.layer addAnimation:transition forKey:nil];
    button.selected = TRUE;
于 2011-03-12T06:17:15.540 回答
1

我终于找到了我需要的东西:我没有将图像分配给按钮的选定和非选定状态,而是保持按钮透明,并为该按钮添加两个视图,最初的 alpha 为 1.0 和 0.0。

选择按钮并输入选择器中指定的方法时,我使用动画在这两个视图之间转换,如下所示:

    NSArray * subviewArray = [button subviews];
    [UIView animateWithDuration:2.0
                    animations:^ {
                        ((UIView *)[subviewArray objectAtIndex:0]).alpha = 0.0;
                        ((UIView *)[subviewArray objectAtIndex:1]).alpha = 1.0;
                    }
                    completion:nil];

如果按钮在转换期间移动,此方法也适用。我希望这可以帮助其他人将来面临同样的问题!

于 2011-03-14T05:04:03.870 回答