重复和自动反转无效。

4

当按钮被点击时,我正在使用动画来转换它,我能够使按钮变大。然而,我认为通过使用 .Repeat 和 .Autoreverse,按钮会回到其正常状态(比例为1.0),但事实并非如此!也许我误解了关于 .AnimateWithDuration 的教程和问题?

这是我正在使用的代码:

 let button = sender as! UIButton

    UIView.animateWithDuration(1.0, delay: 0.6,
        options: [.Repeat, .Autoreverse, .AllowUserInteraction],
        animations:{
        button.transform = CGAffineTransformMakeScale(1.2, 1.2)
        }, completion: nil)

在另一个问题中,我看到可能可以通过添加.AllowUserInteraction 来解决此问题,但事实并非如此。我不知道这是否重要,但此代码包含在触摸事件中。
 @IBAction func addButtonClicked(sender: AnyObject) {}

这里可能发生了什么问题?这不是你应该颠倒动画的方式吗?


使用.Repeat和.Autoreverse,按钮将会呈现“脉动”的效果。 在测试代码中,该代码的运行结果符合预期。 @IBAction func pushButton(sender: AnyObject) {let btt = sender as! UIButton UIView.animateWithDuration(1.0, delay: 0.6, options: [.Repeat, .Autoreverse, .AllowUserInteraction], animations:{ btt.transform = CGAffineTransformMakeScale(1.2, 1.2) }, completion: nil)} - Ulysses
请仔细检查按钮是否链接到此函数,使用断点确保其调用。 - Ulysses
@UlyssesR,它在调用,因为当我点击它时按钮确实变大了,但它没有恢复到正常状态。 - Jesus Rodriguez
1个回答

5
在动画结束时,您应该重置对象的大小。
.autoreverse 只是“视觉上反转”,但不会改变实际对象的大小。
试一下这个。
@IBAction func prss(sender: AnyObject) {
    let btt = sender as! UIButton

    UIView.animate(withDuration: 1.0, delay: 0.6, options: [.autoreverse, .allowUserInteraction], animations:{
        btt.transform = CGAffineTransform(scaleX: 5.0, y: 5.0)
    }, completion: { (finished) in
        btt.transform = CGAffineTransform(scaleX: 1.0, y: 1.0)
    })
}

你说得对。我必须使用完成来重置按钮。谢谢! - Jesus Rodriguez
".Autoreverse只是“视觉上的反转”,但不会改变实际对象大小。" 这对我的动画问题很有帮助。谢谢! - Dacker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接