gpt4 book ai didi

nsview - NSView 上的动画自动布局约束和 Alpha

转载 作者:行者123 更新时间:2023-12-04 02:06:50 28 4
gpt4 key购买 nike

swift 3、iOS 10、macOS 10.12.4
我正在构建一个在 iOS 和 Mac 上运行的应用程序。在iOS端,我成功动画了一个UIView .当用户点击某物时,会出现一个弹出窗口并动画到位。这是我在 中的代码水龙头 事件:

self.popupConstraintX.constant = x
self.popupConstraintY.constant = y

UIView.animate(withDuration: 0.25 , delay: 0.0, options: .curveLinear, animations: {
self.graphPopup.alpha = 1.0
self.layoutIfNeeded()

}, completion:nil)
在这种情况下, selfUITableViewCell持有 graphPopup .
我在 Mac 端构建了相同的东西,但我正在尝试动画 graphPopup现在是 NSView .这是我目前在我的 中的内容点击事件:
self.popupConstraintX.constant = x
self.popupConstraintY.constant = y

self.view.layoutSubtreeIfNeeded()

NSAnimationContext.runAnimationGroup({_ in
self.graphPopup.alphaValue = 1.0

//Indicate the duration of the animation
NSAnimationContext.current().duration = 0.25
NSAnimationContext.current().allowsImplicitAnimation = true
self.view.updateConstraints()
self.view.layoutSubtreeIfNeeded()

}, completionHandler:nil)
这里 self指包含 NSViewController .没有任何动画——不是位置或 alphagraphPopup .它只是出现又消失,就像 1985 年在 Atari 上一样。
知道我的 NSView 做错了什么吗?动画片?

更新
为了后代的缘故,这里是 BJ 建议的工作代码(稍作调整以使用隐式动画上下文):
self.popupConstraintX.constant = x
self.popupConstraintY.constant = y

NSAnimationContext.runAnimationGroup({context in
context.duration = 0.25
context.allowsImplicitAnimation = true

self.graphPopup.alphaValue = 1.0
self.view.layoutSubtreeIfNeeded()

}, completionHandler:nil)

最佳答案

alphaValue的修改在您打开隐式动画之前发生,因此不会对 alpha 进行动画处理。我不清楚这是否是故意的。

View 没有动画到 popupConstraint 给出的位置s,因为你实际上并没有在动画 block 内做任何会导致 View 框架改变的事情。为了触发一个隐式动画,你不仅要更新约束;您还必须确保 View 的 frame动画 block 内的变化。如果您使用 AutoLayout,这通常通过调用 layoutSubtreeIfNeeded 来完成。 .

然而 ,因为您更新了约束并调用了 layoutSubtreeIfNeeded()在动画 block 之前, block 内没有额外的帧更改(除非在 updateConstraints() 中发生了一些你没有向我们展示的事情。)

您应该删除对 layoutSubtreeIfNeeded() 的第一次调用。 ,或者如果仍然需要,请将其放在 popupConstraint 上方修改。然后,当您调用 layoutSubtreeIfNeeded()在动画 block 中,将根据这些更改的约束设置一个新帧,您应该会看到动画正在发生。

关于nsview - NSView 上的动画自动布局约束和 Alpha,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43903105/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com