gpt4 book ai didi

ios - Swift iOS -Constraint 即使调用了 view.layoutIfNeeded() 也没有动画

转载 作者:可可西里 更新时间:2023-11-01 01:57:24 25 4
gpt4 key购买 nike

我有一个圆形的 likeButton,它位于圆形的 moreButton 后面。 likeButton 固定到 moreButton 的 centerX 和 centerY。当我按下 moreButton 时,我想将 likeButton 设置为比 moreButton 高 200 点的动画。

我使用 NSLayoutConstraint 来跟踪 likeButton 的 centerY 并对其进行更改。当我调用 UIView.animate 并在它的闭包中调用 self.view.layoutIfNeeded() 时, View 没有更新。

@objc func moreButtonTapped(){

likeButtonCenterY?.isActive = false
likeButton.centerYAnchor.constraint(equalTo: self.moreButton.centerYAnchor, constant: -200)
likeButtonCenterY?.isActive = true

UIView.animate(withDuration: 0.3) {
self.view.layoutIfNeeded()
}
}

我哪里出错了?

let moreButton: UIButton = {
let button = UIButton(type: .system)
button.translatesAutoresizingMaskIntoConstraints = false
button.setImage(UIImage(named: "more"), for: .normal)
button.tintColor = .red
button.clipsToBounds = true
button.addTarget(self, action: #selector(moreButtonTapped), for: .touchUpInside)
return button
}()

let likeButton: UIButton = {
let button = UIButton(type: .system)
button.translatesAutoresizingMaskIntoConstraints = false
button.setImage(UIImage(named: "like"), for: .normal)
button.tintColor = .blue
button.clipsToBounds = true
return button
}()

var likeButtonCenterY: NSLayoutConstraint?

override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
setAnchors()
}

override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
moreButton.layer.cornerRadius = moreButton.frame.size.width / 2
likeButton.layer.cornerRadius = likeButton.frame.size.width / 2
}

@objc func moreButtonTapped(){

likeButtonCenterY?.isActive = false
likeButton.centerYAnchor.constraint(equalTo: self.moreButton.centerYAnchor, constant: -200)
likeButtonCenterY?.isActive = true

UIView.animate(withDuration: 0.3) {
self.view.layoutIfNeeded()
}
}

func setAnchors(){
view.addSubview(likeButton)
view.addSubview(moreButton)

moreButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
moreButton.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -200).isActive = true
moreButton.widthAnchor.constraint(equalToConstant: 100).isActive = true
moreButton.heightAnchor.constraint(equalToConstant: 100).isActive = true

likeButtonCenterY = likeButton.centerYAnchor.constraint(equalTo: moreButton.centerYAnchor)
likeButtonCenterY?.isActive = true

likeButton.centerXAnchor.constraint(equalTo: moreButton.centerXAnchor).isActive = true
likeButton.widthAnchor.constraint(equalToConstant: 100).isActive = true
likeButton.heightAnchor.constraint(equalToConstant: 100).isActive = true
}

最佳答案

试试这个

@objc func moreButtonTapped(){

likeButtonCenterY?.isActive = false
likeButtonCenterY = likeButton.centerYAnchor.constraint(equalTo: self.moreButton.centerYAnchor, constant: -200)
likeButtonCenterY?.isActive = true

UIView.animate(withDuration: 0.3) {
self.view.layoutIfNeeded()
}
}

你忘了写 likeButtonCenterY =

关于ios - Swift iOS -Constraint 即使调用了 view.layoutIfNeeded() 也没有动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50894042/

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