将项目添加到数组 Swift

Posted

技术标签:

【中文标题】将项目添加到数组 Swift【英文标题】:Add items to array Swift 【发布时间】:2019-12-27 04:54:22 【问题描述】:

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

当用户点击buttonwidthActivatorBtn 时,它应该允许用户选择图像视图并更改图像视图的宽度。它只有在选择了 widthActivatorBtn 并将 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 
            $0.translatesAutoresizingMaskIntoConstraints = false
            view.addSubview($0)
            $0.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)

    


【问题讨论】:

【参考方案1】:

删除selectNum 变量,它导致了问题。 当您创建第一个图像时selectNum 不等于3,因此手势不会添加到第一个imageView,而是在单击width button 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)

        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 func 中添加条件selectNum == 3,以调整大小。您可以在某处重置selectNum 以停止调整大小。 所以现在当widthActivatorBtn被按下时,只有宽度会改变。 希望这对你有用。

【讨论】:

你的权利,这会起作用,但我想在用户更改宽度之前必须触摸按钮 widthActivatorBtn。因此,如果 uiview 控制器上已经放置了图像视图,我需要它以某种方式回归并应用于每个图像视图。 我已经编辑了上面的答案,看看它,让我们知道它是否适合你。

以上是关于将项目添加到数组 Swift的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 动态数组和改变视图

Swift - 如何将点击手势添加到 UIViews 数组?

Swift - 添加到数组后 tableView 不重新加载

将 SwiftyJSON 中的元素添加到 Swift 中的 URL 数组

Swift 4 快捷语法将多个对象(设置了一些属性)添加到数组中?

Swift如何将字符串数组添加到httpBody