使用NSAnimationContext淡出NSButton

Rob*_*eph 5 animation nsview nsanimationcontext swift swift3

我有一个简单的Swift macOS应用程序(使用Xcode 8.2.1),它包含一个NSButton.当我点击按钮时,我希望它在指定时间内淡出.我以为我可以使用,NSAnimationContext但无论我设置什么值context,按钮几乎立即淡出.这不是正确的方法吗?

class ViewController: NSViewController {

  @IBOutlet weak var basicButton: NSButton!

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

  @IBAction func basicButtonClicked(_ sender: NSButton) {
    NSAnimationContext.runAnimationGroup({ (context) in
      context.duration = 10.0
      self.basicButton.animator().alphaValue = 1
    }) { 
      self.basicButton.animator().alphaValue = 0
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Rob*_*eph 5

我误解了动画师值在动画过程中是如何工作的。正确的设置方法是:

@IBAction func basicButtonClicked(_ sender: NSButton) {
  NSAnimationContext.runAnimationGroup({ (context) in
    context.duration = 10.0
    // Use the value you want to animate to (NOT the starting value)
    self.basicButton.animator().alphaValue = 0
  })
}
Run Code Online (Sandbox Code Playgroud)

  • 这里需要注意的重要一点是,您需要访问按钮的`.animator()` 方法来获取其动画代理对象!不要直接更改 `alphaValue`。(让我有点注意到这一点!) (2认同)