【问题标题】:Starting fade animation from a specific point on an UIView in Swift从 Swift 中的 UIView 上的特定点开始淡入淡出动画
【发布时间】:2016-08-22 15:16:42
【问题描述】:

我在动画淡入和淡出方面遇到问题。

我有一个简单的设置,在故事板上我有一个名为 myViewUIView

我想做的是当用户触摸屏幕时淡入myView,当用户停止触摸屏幕时淡出myView。我可以使用下面的代码来实现。淡入淡出发生在 5 秒内。

但是,当用户在淡入或淡出动画中途开始触摸或停止触摸屏幕时,就会出现问题。

例如,当用户停止触摸屏幕时,不是淡入动画优雅地停止myView 淡入在其当前位置并以淡出动画反转,实际发生的是myView alpha 在开始淡出之前跳转到 1.0

问题:

需要对以下代码进行哪些更改以确保每个新的 动画,淡入或淡出,中断当前淡入动画 发生在myView 并从当前的alpha 开始 之前的淡入淡出动画?

代码:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var myView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.myView.alpha = 0
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        UIView.animateWithDuration(5, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: {
            self.myView.alpha = 1
        }, completion: nil)
    }

    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
    }

    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
        UIView.animateWithDuration(5, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: {
            self.myView.alpha = 0
        }, completion: nil)
    }

}

【问题讨论】:

  • 请原谅我的咆哮,但到底为什么有人会否决这个问题?它精美,内容丰富且清晰。这正是在 Stack Overflow 上提问的方法。这是一个模型问题。
  • 谢谢,谢谢。我尝试尽可能清晰地组织我提出的问题。
  • 当然。不要因投反对票而气馁。

标签: ios swift animation optimization uiview


【解决方案1】:

问题是您的touchesEnded 动画打断了您的touchesBegan 动画,导致touchesBegan 动画被删除并在瞬间显示您已将alpha 设置为1。

为防止这种情况发生,请在您的 options: 中包含 .beginFromCurrentState 选项。

【讨论】:

  • 哇,就这么简单。谢谢你。我像这样更新了动画选项并且它起作用了。 (想知道为什么BeginFromCurrentState 不是默认状态。)options: [UIViewAnimationOptions.CurveEaseInOut, UIViewAnimationOptions.BeginFromCurrentState]
  • 而线索就在您的问题中!您说得非常正确:“确保每个新动画......从上一个淡入淡出动画的当前 alpha 开始”。您确切地发现了问题所在。干得好。
  • PS 我.begin 中的小写字母是因为这是 Swift 3 中的拼写。恐怕我现在完全认为是 Swift 3。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-12
  • 1970-01-01
  • 2014-01-20
  • 2012-12-18
  • 2013-01-24
  • 2011-03-28
  • 1970-01-01
相关资源
最近更新 更多