将项目添加到数组 Swift

Add items to array Swift

我的 swift 代码现在使用 func addbox to append imageviews 到一个空的 array imageviews。

当用户点击 button widthActivatorBtn 时,它应该允许用户在图像视图上 select 并更改图像视图的宽度。它有效,但前提是 widthActivatorBtn 被 selected 并且 selectNum 更改为 3。

我可以影响在 selectNum 更改为 3 之后放置的图像视图,但不能影响它之前的图像视图。查看我的 gif,您可以看到问题所在。当 selectNum 更改为 3 时,所有图像视图都应该能够通过滑块更改其宽度。

import UIKit

class ViewController: UIViewController {

    var slider = UISlider()
    var ht = -90
    var widthSize = 80
    var emptyArray = [UIImageView]()
    var addImageview = UIButton()
    var width = UIButton()
    var currentView: UIView?
    var selectNum = Int()

    override func viewDidLoad() {
        super.viewDidLoad()
        [addImageview,slider,width].forEach {
            [=11=].translatesAutoresizingMaskIntoConstraints = false
            view.addSubview([=11=])
            [=11=].backgroundColor = .systemOrange
        }

        addImageview.setTitle("add imageview", for: .normal)

        width.setTitle("change width", for: .normal)
        addImageview.frame = CGRect(x: view.center.x-115, y: view.center.y + 200, width: 160, height: 40)
        slider.frame = CGRect(x: view.center.x-115, y: view.center.y-200, width: 160, height: 40)

        width.frame = CGRect(x: view.center.x-115, y: view.center.y + 100, width: 160, height: 40)
        addImageview.addTarget(self, action: #selector(addBOx), for: .touchUpInside)
        width.addTarget(self, action: #selector(widthActivatorBtn), for: .touchUpInside)
        slider.addTarget(self, action: #selector(ji), for: .valueChanged)
        slider.minimumValue = 10
        slider.maximumValue = 150

    }

    @objc func widthActivatorBtn() {

        width.backgroundColor = .systemPink

        selectNum = 3
    }

    @objc func addBOx() {


        let subview = UIImageView()


        subview.isUserInteractionEnabled = true
        emptyArray.append(subview)
        view.addSubview(subview)

        subview.frame = CGRect(x: view.bounds.midX - 0, y: view.bounds.midY + CGFloat(ht), width: CGFloat(widthSize), height: 35)
        subview.backgroundColor = .purple


        ht += 50
        emptyArray.append(subview)

        if  selectNum == 3{
            let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTapGestured(_:)))
            subview.addGestureRecognizer(tapGesture)

        }


    }

    @objc func handleTapGestured(_ gesture: UIPanGestureRecognizer) {
        currentView = gesture.view

    }


    @objc func ji(sender : UISlider){
        widthSize = Int(slider.value)
        currentView?.bounds.size.width = CGFloat(slider.value)

    }

}

删除 selectNum 变量,这是导致问题的原因。 当你创建第一个图像时 selectNum 不等于 3,因此手势不会添加到第一个 imageView,但在点击 width buttonselectNum 设置为值3 之后,当你创建任何 imageview 时,imageView 就会得到手势,你的宽度逻辑就可以工作了。

@objc func addBOx() {


        let subview = UIImageView()


        subview.isUserInteractionEnabled = true
        emptyArray.append(subview)
        view.addSubview(subview)

        subview.frame = CGRect(x: view.bounds.midX - 0, y: view.bounds.midY + CGFloat(ht), width: CGFloat(widthSize), height: 35)
        subview.backgroundColor = .purple


        ht += 50
        emptyArray.append(subview)

        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTapGestured(_:)))
        subview.addGestureRecognizer(tapGesture)

    }

@objc func widthActivatorBtn() {

        width.backgroundColor = .systemPink

        selectNum = 3
    }

    @objc func ji(sender : UISlider){
      if selectNum == 3 { 
        widthSize = Int(slider.value)
        currentView?.bounds.size.width = CGFloat(slider.value)
      }
    }

ji函数中添加条件selectNum == 3,调整大小。您可以在某处重置 selectNum 以停止调整大小。 所以现在当 widthActivatorBtn 被按下时,只有宽度会改变。 希望这对你有用。