ios - UIView 隐藏/显示动画

我的简单目标是淡化动画隐藏和显示功能。

Button.hidden = YES;

足够简单。但是,是否有可能让它消失而不仅仅是消失?这样看起来很不专业。

最佳答案

在 iOS 4 及更高版本中,有一种方法可以做到这一点,只需使用 UIView 过渡方法,而无需导入 QuartzCore。你可以说:

Objective-C

[UIView transitionWithView:button
                  duration:0.4
                   options:UIViewAnimationOptionTransitionCrossDissolve
                animations:^{
                     button.hidden = YES;
                }
                completion:NULL];

swift

UIView.transition(with: button, duration: 0.4, 
                  options: .transitionCrossDissolve, 
                  animations: {
                 button.hidden = false
              })

以前的解决方案

Michail 的解决方案可行,但它实际上并不是最好的方法。

Alpha 淡入淡出的问题在于,有时不同的重叠 View 层在淡出时看起来很奇怪。还有其他一些使用核心动画的替代方案。首先在您的应用程序中包含 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;

这种方法的好处是您可以交叉淡化按钮的任何属性,即使它们不是可动画的(例如按钮的文本或图像),只需设置过渡,然后立即设置属性。

https://stackoverflow.com/questions/9115854/

相关文章:

iphone - 错误 : The service is invalid

objective-c - 为什么在 C 中将 1,000,000,000 写为 1000*1000

ios - 以编程方式在 UIStackView 中添加 View

ios - 如何在 UILabel 中嵌入小图标

ios - Objective-C 和 Swift URL 编码

objective-c - 关于iOS5 SDK中自动引用计数的一些问题

ios - 如何在 UITableView 中设置分隔符的全宽

ios - 无法同时满足约束,将尝试通过打破约束来恢复

ios - 如何使 UIButton 文本对齐中心?使用 IB

ios - 使用 glob 获取目录中的文件列表