我正在尝试设置一个简单的脉动环,它会突出显示一个按钮,以提示用户推荐的选择。我制作了简单的fadeIn()和fadeOut()函数,在fadeOut()中设置了一个延迟,这样它就会在fadeIn()完成时触发......或者至少是我的意图。结果是,当按下按钮时,环立即变为alpha = 1,然后延迟2秒,然后在2秒内消失。一旦我有一个循环工作,我想把它放在一个循环中,以便在需要时继续运行。
如果单独执行,任一功能都将按预期工作。我发现另一个线程处理简单的fadeIn或fadeOut,但不是两者都在一起。
我确信代码完全按照我所说的去做,但我无法弄清楚为什么它不起作用。有人能指出我的错误吗?谢谢。
@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
}
}
答案 0 :(得分:1)
您可以通过一个重复动画实现所需效果。将.Autoreverse | .Repeat
作为options:
传递给animateWithDuration
,它会自动撤消并重复淡入淡出。
按下按钮后,您可以通过调用greenRing.layer.removeAllAnimations()
如果您还添加选项UIViewAnimationOption.CurveEaseInOut
,动画也可能看起来更好。所以:
.Autoreverse | .Repeat | .CurveEaseInOut
答案 1 :(得分:0)
通过在fadeIn()之后立即调用fadeOut(),系统在技术上立即启动第二个动画,第一步是延迟。为了开始第二个动画,它立即完成第一个动画并继续前进。
一旦动画完成,尝试从fadeIn()内部调用fadeOut(),然后你可以多次调用fadeIn(),或者将它放在循环中以使其保持运行。
答案 2 :(得分:0)
由Angela提供,此代码创建了一个具有可变周期的闪烁环。非常感谢。
func fadeInOutSphere() {
greenRingSphere.alpha = 0.2
UIImageView.animateWithDuration(3.0, delay: 0.0, options: .Autoreverse | .Repeat, animations: {
self.greenRingSphere.alpha = 1
}, completion: nil)
}