如何让这个淡入淡出动画起作用?
How do I get this fade animation to work?
我正在尝试设置一个简单的脉动环,它会突出显示一个按钮,以提示用户选择推荐的选项。我制作了简单的 fadeIn() 和 fadeOut() 函数,在 fadeOut() 中设置了延迟,以便它会在 fadeIn() 完成时触发……或者至少这是我的意图。结果是,按下按钮时,环立即变为 alpha = 1,然后延迟 2 秒,然后在 2 秒内逐渐消失。一旦我有一个循环工作,我想把它放入一个循环中以在需要时保持它运行。
如果单独执行,这两个函数都会按预期工作。我发现另一个线程处理简单的淡入或淡出,但不是同时处理。
我确信代码完全按照我告诉它的方式执行,但我不明白为什么它不起作用。有人可以指出我的错误吗?谢谢。
@IBOutlet weak var greenRing: UIImageView!
@IBAction func buttonPressed(sender: AnyObject)
{
fadeIn()
fadeOut()
}
func fadeIn() {
UIImageView.animateWithDuration(2.0, animations: {
self.greenRing.alpha = 1
})
}
func fadeOut() {
UIImageView.animateWithDuration(2.0, delay: 2.0, options: nil, animations: {
self.greenRing.alpha = 0
}, completion: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
greenRing.alpha = 0
}
}
通过在 fadeIn() 之后立即调用 fadeOut(),系统在技术上立即开始第二个动画,其第一步是延迟。为了开始第二个动画,它立即完成第一个动画并继续前进。
尝试在动画完成后从 fadeIn() 内部调用 fadeOut(),然后您可以根据需要多次调用 fadeIn(),或者将其放入循环中以保持它 运行 .
你可以用一个重复的动画来达到你想要的效果。将 .Autoreverse | .Repeat
作为 options:
传递给 animateWithDuration
,它将自动反转并重复淡入。
按下按钮时,可以调用greenRing.layer.removeAllAnimations()
停止动画
如果您还添加选项 UIViewAnimationOption.CurveEaseInOut
,动画也可能看起来更漂亮。所以:
.Autoreverse | .Repeat | .CurveEaseInOut
感谢 Angela,这段代码创建了一个周期可变的闪烁环。非常感谢。
func fadeInOutSphere() {
greenRingSphere.alpha = 0.2
UIImageView.animateWithDuration(3.0, delay: 0.0, options: .Autoreverse | .Repeat, animations: {
self.greenRingSphere.alpha = 1
}, completion: nil)
}
我正在尝试设置一个简单的脉动环,它会突出显示一个按钮,以提示用户选择推荐的选项。我制作了简单的 fadeIn() 和 fadeOut() 函数,在 fadeOut() 中设置了延迟,以便它会在 fadeIn() 完成时触发……或者至少这是我的意图。结果是,按下按钮时,环立即变为 alpha = 1,然后延迟 2 秒,然后在 2 秒内逐渐消失。一旦我有一个循环工作,我想把它放入一个循环中以在需要时保持它运行。
如果单独执行,这两个函数都会按预期工作。我发现另一个线程处理简单的淡入或淡出,但不是同时处理。
我确信代码完全按照我告诉它的方式执行,但我不明白为什么它不起作用。有人可以指出我的错误吗?谢谢。
@IBOutlet weak var greenRing: UIImageView!
@IBAction func buttonPressed(sender: AnyObject)
{
fadeIn()
fadeOut()
}
func fadeIn() {
UIImageView.animateWithDuration(2.0, animations: {
self.greenRing.alpha = 1
})
}
func fadeOut() {
UIImageView.animateWithDuration(2.0, delay: 2.0, options: nil, animations: {
self.greenRing.alpha = 0
}, completion: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
greenRing.alpha = 0
}
}
通过在 fadeIn() 之后立即调用 fadeOut(),系统在技术上立即开始第二个动画,其第一步是延迟。为了开始第二个动画,它立即完成第一个动画并继续前进。
尝试在动画完成后从 fadeIn() 内部调用 fadeOut(),然后您可以根据需要多次调用 fadeIn(),或者将其放入循环中以保持它 运行 .
你可以用一个重复的动画来达到你想要的效果。将 .Autoreverse | .Repeat
作为 options:
传递给 animateWithDuration
,它将自动反转并重复淡入。
按下按钮时,可以调用greenRing.layer.removeAllAnimations()
停止动画
如果您还添加选项 UIViewAnimationOption.CurveEaseInOut
,动画也可能看起来更漂亮。所以:
.Autoreverse | .Repeat | .CurveEaseInOut
感谢 Angela,这段代码创建了一个周期可变的闪烁环。非常感谢。
func fadeInOutSphere() {
greenRingSphere.alpha = 0.2
UIImageView.animateWithDuration(3.0, delay: 0.0, options: .Autoreverse | .Repeat, animations: {
self.greenRingSphere.alpha = 1
}, completion: nil)
}