iOS9.0中的动画锚样式约束
Posted
技术标签:
【中文标题】iOS9.0中的动画锚样式约束【英文标题】:Animate anchor style constraints in iOS9.0 【发布时间】:2015-09-26 21:28:22 【问题描述】:使用锚样式NSLayoutConstraints
(如在此答案中:Swift | Adding constraints programmatically)如何为子视图设置动画?
对于那些懒惰的人,这里是代码:
override func viewDidLoad()
super.viewDidLoad()
let newView = UIView()
newView.backgroundColor = UIColor.redColor()
newView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(newView)
let horizontalConstraint = newView.centerXAnchor.constraintEqualToAnchor(view.centerXAnchor)
let vertivalConstraint = newView.centerYAnchor.constraintEqualToAnchor(view.centerYAnchor)
let widthConstraint = newView.widthAnchor.constraintEqualToAnchor(nil, constant: 100)
let heightConstraint = newView.heightAnchor.constraintEqualToAnchor(nil, constant: 100)
NSLayoutConstraint.activateConstraints([horizontalConstraint, vertivalConstraint, widthConstraint, heightConstraint])
具体来说,如果我想向右滑动newView
,我该怎么做?谢谢。
【问题讨论】:
【参考方案1】:您需要设置约束,然后在动画块中使用 layoutIfNeeded 进行更新:
self.horizontalConstraint.constant += 10 // move right 10 px.
UIView.animateWithDuration(0.5)
self.view.layoutIfNeeded()
【讨论】:
所以我必须先将约束分配给全局变量?我关心的是NSLayoutConstraint.activateConstraints
——如果我改变了一个锚约束,我不需要再次调用NSLayoutConstraint.activateConstraints
来激活它吗?另外,如果我想将锚点更改为另一个 UIView 怎么办?
No.. HorizontalConstraint 是你设置的约束。它有一个名为constant
的属性,如果你添加它,你的视图会向右移动。您设置它的方式,常量默认为 0。正数在中心右侧,负数在中心左侧。不确定你从哪里得到全局变量。
我正在使用centerXAnchor
和centerYAnchor
,请阅读上面的代码。我想做的是改变锚点。
您询问了如何为视图设置动画。我向您展示了如何修改约束并为其设置动画 - 苹果推荐的使用约束为视图设置动画的方法。首先,更新约束,然后在动画块内的父视图上调用layoutIfNeeded
。如果您尝试做其他事情,请更新您的问题。在您的代码示例中,您对newView
有一个水平约束。如果您添加到它,您将推送newView
正确。使用我在答案中显示的动画块对其进行动画处理。
您不能直接更改锚点。锚点是一个只读属性,仅有助于布局。这就是你更新约束的constant
属性的原因。以上是关于iOS9.0中的动画锚样式约束的主要内容,如果未能解决你的问题,请参考以下文章