我的swift的代码目标是使用滑块增加图像视图的大小。根据滑动条的值,imageview图片应该能够增加减小尺寸。当调用函子时,必须禁用原始约束,以便可以更改宽度和高度。我听说可以使用动画块。
import UIKit
class ViewController: UIViewController {
var pic = UIImageView()
var slide = UISlider()
var currentView: UIView?
var oldCons = [NSLayoutConstraint]()
override func viewDidLoad() {
super.viewDidLoad()
slide.backgroundColor = .systemPink
pic.backgroundColor = .systemGreen
[pic,slide].forEach {
$0.translatesAutoresizingMaskIntoConstraints = false
view.addSubview($0)
}
NSLayoutConstraint.activate([
slide.heightAnchor.constraint(equalTo: view.heightAnchor ,multiplier: 0.25),
slide.widthAnchor.constraint(equalTo: view.widthAnchor ,multiplier: 0.25),
slide.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant :0),
slide.topAnchor.constraint(equalTo: pic.bottomAnchor, constant :0),
])
oldCons = [
pic.topAnchor.constraint(equalTo: view.topAnchor, constant :0),
pic.heightAnchor.constraint(equalTo: view.heightAnchor ,multiplier: 0.25),
pic.widthAnchor.constraint(equalTo: view.widthAnchor ,multiplier: 0.25),
pic.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant :0),
]
NSLayoutConstraint.activate(oldCons)
slide.addTarget(self, action: #selector(change), for: .allTouchEvents)
}
@objc func change(){
NSLayoutConstraint.deactivate(oldCons)
pic.bounds.size.width = CGFloat(slide.value)
pic.bounds.size.height = CGFloat(slide.value)
}
}
答案 0 :(得分:0)
您不需要取消约束。您只需要保存它们并在滑块滑动时更新常量即可。
class ViewController: UIViewController {
var pic = UIImageView()
var slide = UISlider()
var currentView: UIView?
var picWidth: NSLayoutConstraint!
var picHeight: NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
// ...
picWidth = pic.widthAnchor.constraint(equalTo: view.widthAnchor ,multiplier: 0.25)
picHeight = pic.heightAnchor.constraint(equalTo: view.heightAnchor ,multiplier: 0.25)
NSLayoutConstraint.activate([
slide.heightAnchor.constraint(equalTo: view.heightAnchor ,multiplier: 0.25),
slide.widthAnchor.constraint(equalTo: view.widthAnchor ,multiplier: 0.25),
slide.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant :0),
slide.topAnchor.constraint(equalTo: pic.bottomAnchor, constant :0),
pic.topAnchor.constraint(equalTo: view.topAnchor, constant :0),
picWidth,
picHeight,
pic.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant :0),
])
// ...
}
@objc func change(){
picWidth.constant = CGFloat(slide.value) * view.frame.size.width * 0.25
picHeight.constant = CGFloat(slide.value) * view.frame.size.height * 0.25
}
}