在iOS 4及更高版本中,只需使用UIView转换方法即可完成此操作,而无需导入QuartzCore.你可以只说:
[UIView transitionWithView:button
duration:0.4
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
button.hidden = YES;
}
completion:NULL];
UIView.transition(with: button, duration: 0.4,
options: .transitionCrossDissolve,
animations: {
button.hidden = false
})
米凯尔的解决方案会奏效,但实际上并不是最好的方法.
alpha淡入的问题是,有时不同的重叠视图层淡出时看起来很奇怪.还有其他一些使用核心动画的替代方案.首先在你的应用程序中加入QuartzCore框架,并在标题中添加#import <QuartzCore/QuartzCore.h>
.现在,您可以执行以下操作之一:
1)设置button.layer.shouldRasterize = YES;
,然后使用Michail在其答案中提供的Alpha动画代码.这将防止图层奇怪地混合,但会有轻微的性能损失,如果按钮没有在像素边界上精确对齐,可能会使按钮看起来模糊.
或者:
2)改用以下代码为淡入淡出设置动画:
CATransition *animation = [CATransition animation];
animation.type = kCATransitionFade;
animation.duration = 0.4;
[button.layer addAnimation:animation forKey:nil];
button.hidden = YES;
这种方法的好处是,你可以交叉淡入淡出按钮的任何属性,即使它们是不可动画的(例如,按钮的文本或图像),只需设置过渡,然后立即设置属性即可.