我有一个UITextField
,我想在点击时放大它的宽度。我设置了约束,并确保左侧的约束优先级低于我试图在右侧设置动画的约束优先级。
这是我试图使用的代码。
// move the input box
UIView.animateWithDuration(10.5, animations: {
self.nameInputConstraint.constant = 8
}, completion: {
(value: Bool) in
println(">>> move const")
})
这是可行的,但似乎只是瞬间发生,似乎没有任何运动。我试着将其设置为10秒,以确保没有遗漏任何内容,但我得到了相同的结果。
nameInputConstraint
是我控制的从IB拖到我的类中的约束的名称。
需要指出的是,view.layoutIfNeed()
仅适用于视图子视图。
因此,要对视图约束进行动画处理,重要的是在视图到动画超级视图中调用它,如下所示:
topConstraint.constant = heightShift
UIView.animate(withDuration: 0.3) {
// request layout on the *superview*
self.view.superview?.layoutIfNeeded()
}
简单布局的示例如下:
class MyClass {
/// Container view
let container = UIView()
/// View attached to container
let view = UIView()
/// Top constraint to animate
var topConstraint = NSLayoutConstraint()
/// Create the UI hierarchy and constraints
func createUI() {
container.addSubview(view)
// Create the top constraint
topConstraint = view.topAnchor.constraint(equalTo: container.topAnchor, constant: 0)
view.translatesAutoresizingMaskIntoConstraints = false
// Activate constaint(s)
NSLayoutConstraint.activate([
topConstraint,
])
}
/// Update view constraint with animation
func updateConstraint(heightShift: CGFloat) {
topConstraint.constant = heightShift
UIView.animate(withDuration: 0.3) {
// request layout on the *superview*
self.view.superview?.layoutIfNeeded()
}
}
}
SWIFT 4及以上:
self.mConstraint.constant = 100.0
UIView.animate(withDuration: 0.3) {
self.view.layoutIfNeeded()
}
完成示例:
self.mConstraint.constant = 100
UIView.animate(withDuration: 0.3, animations: {
self.view.layoutIfNeeded()
}, completion: {res in
//Do something
})
您需要先更改约束,然后设置更新动画
这应该在superview中。
self.nameInputConstraint.constant = 8
斯威夫特2
UIView.animateWithDuration(0.5) {
self.view.layoutIfNeeded()
}
斯威夫特3,4,5
UIView.animate(withDuration: 0.5) {
self.view.layoutIfNeeded()
}
虽然有几个问题的答案与我的相似,但似乎没有一个能解决我的困境。我有一个图像视图,我可以通过改变水平和垂直约束来移动它,并使用长按手势在屏幕上移动。如果这张图像没有移动一定的距离,我希望它能动画化回到原来的位置。我正在使用以下代码示例来尝试执行此操作: 和在其他地方定义为用户单击的位置 和定义为用户在超级视图中的位置 不用说,平移图像时,一切都正常。它会拖动,然后在手势结束时停止。问题是,如果用户没
在我的人造示例中,我有以下单个视图: 如您所见,它由几个简单的约束组成: 将水平和垂直中心对齐, 高度(设置为常数) 前导空格和尾随空格(设置为常量) 我想要实现的是让这个红色/粉红色的视图从顶部“进来”。传统上,在一个没有约束的世界中,我只需修改,但我不确定在约束世界中如何进行类似操作。 为了重申我的问题,我如何使我的视图从场景开始,并为从顶部飞入的视图设置动画? 我考虑过设置垂直中心约束的动画
我有一组AL约束来定位一个子vc,它有两个位置,展开和折叠。 我发现,当我添加折叠约束时,带有常量的上锚到下锚约束,当第一次创建vc时,当我激活它时,似乎有额外的间距。似乎是因为当时没有实际的高度。 当我在viewDidLayoutSubviews中添加约束时,额外的间距消失了,约束行为正常。除了现在在动画中的约束之间切换时,切换到展开约束和约束打断时,无法停用折叠的约束。可能是因为在整个过渡动画
问题内容: 我正在使用来更新旧的应用,并且当没有广告时,它会滑出屏幕。出现广告时,它会在屏幕上滑动。基本的东西。 旧样式,我将帧设置在动画块中。新样式,我对自动布局约束有一个确定Y位置,在这种情况下,它是距父视图底部的距离,并修改常量: 横幅完全按预期移动,但没有动画。 更新:我重新观看了WWDC 12讲的“掌握自动布局的最佳实践” ,其中涵盖了动画。它讨论了如何使用CoreAnimation更新
我在viewcontroller的中央有一个UITextField(搜索字段),我正在使用UIView(liveView)创建一条细线。我以编程方式创建线视图及其约束。lineView本质上是一个下划线,当用户键入时,它在文本字段下的宽度会增加。用户按enter键后,我将调整约束,以便文本字段和视图移动到viewcontroller的顶部。我让它工作起来了,但随着线视图向上移动,它开始淡出并消失。
我有两个两个文本字段displayNameTF和emailTF。 我想设置一个文本字段的动画,使其超过另一个文本字段的顶部。 我已经将emailTF的中心存储在emailTFOrigin中,我正在将displayNameTF的中心设置为它,并设置所需的布局动画。 我得到的动画是,默认情况下,文本字段彼此相距约5点,displaynameTF直接跳到emailTF的顶部,并将动画恢复到其原始位置。