swift 实时更新约束

iqxoj9l9  于 2022-11-21  发布在  Swift
关注(0)|答案(1)|浏览(320)

如何通过点击图像来更新约束?
对不起,不识字的讲话,我刚开始学英语,就像斯威夫特)
我如何通过点击图像来更新约束,特别是高度和宽度。请参见下面的代码。我尝试设置高度和宽度变量的新值,当我点击图像时,我希望图像在实时中变得更大。但这不起作用。请帮助。P.S.请不要问我为什么需要它,只是训练,我知道我可以通过CGAfflinetransorm做什么...谢谢
第一个

s6fujrry

s6fujrry1#

正如Matt在评论中所说的,关键是始终与约束一起工作,而不是试图在视图中混合绝对维度。
您可以将所有功能 Package 在视图中,而不是将手势识别器放在父视图中,尽管您需要将imageView约束到其父视图的尺寸(而不仅仅是其中心),以便更新图像大小也会更新父视图的尺寸以适应增长。
您需要将图像大小的宽度约束存储为一个属性,以便可以在imageTap()方法中访问它。下面的示例假定图像始终为正方形,但如果不希望高度和宽度相等,可以用类似的方式存储和操作它们。

class View: UIView {
   
   let image = UIImageView()
   let inset = 0.0
   var imageWidthDimension: NSLayoutConstraint!
   
   init() {
      super.init(frame:.zero)
      image.backgroundColor = .black
      image.image = UIImage(systemName: "circle")!
      translatesAutoresizingMaskIntoConstraints = false
      
      addSubview(image)
      
      let tap = UITapGestureRecognizer(target: self, action: #selector(imageTap))
      image.addGestureRecognizer(tap)
      image.isUserInteractionEnabled = true
      
      image.translatesAutoresizingMaskIntoConstraints = false
      imageWidthDimension =  image.widthAnchor.constraint(equalToConstant: 150.0)
      NSLayoutConstraint.activate([
         image.leadingAnchor.constraint(equalTo: leadingAnchor, constant: inset),
         image.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -inset),
         image.topAnchor.constraint(equalTo: topAnchor, constant: inset),
         image.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -inset),
         imageWidthDimension,
         image.heightAnchor.constraint(equalTo: image.widthAnchor),
      ])
   }
   
   required init?(coder: NSCoder) {
      fatalError("init(coder:) has not been implemented")
   }
   
 
   @objc func imageTap() {
      imageWidthDimension.constant = 250.0 
      image.updateConstraints()
   }
}

相关问题