如何更改附加到空数组的 uiimageview 的大小

how to change the size of a uiimageview appended to a empty array

我的 swift 代码使用一个按钮将 imageviews 放置在一个 uiviewcontroller 上,该控制器是一个空数组的父级。问题是我不知道如何在将 invidicual imageview 放置在 uiview 控制器上后影响它的大小。单击图像视图然后移动滑块时,图像视图应更改大小。然而,发生的事情是滑块更改时的值会影响放置在 uiviewcontroller 上的下一个 iamgeview。下面的 Pitcure 包括在内,我圈出了滑块应该产生的效果。这是我正在尝试做的事情的视频 https://www.youtube.com/watch?v=ho6ID6XVEYw&feature=youtu.be

import UIKit

   class ViewController: UIViewController {

var sx = UISlider()
var count: Int = 0
var ht = -90
var ww = 80
var arrTextFields = [UIImageView]()
var b7 = UIButton()


override func viewDidLoad() {
    super.viewDidLoad()

    [b7,sx].forEach {
        [=10=].translatesAutoresizingMaskIntoConstraints = false
        view.addSubview([=10=])
        [=10=].backgroundColor = .systemOrange
    }

    b7.frame = CGRect(x: view.center.x-115, y: view.center.y + 200, width: 70, height: 40)
    sx.frame = CGRect(x: view.center.x-115, y: view.center.y-200, width: 70, height: 40)
    b7.addTarget(self, action: #selector(addBOx), for: .touchUpInside)
}

//func that adds imageview.
@objc func addBOx() {


    let subview = UIImageView()


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



    sx.addTarget(self, action: #selector(ji), for: .valueChanged)
    sx.minimumValue = 10
    sx.maximumValue = 150

    subview.frame = CGRect(x: view.bounds.midX - 0, y: view.bounds.midY + CGFloat(ht), width: CGFloat(ww), height: 35)
    subview.backgroundColor = .purple
    subview.tag = count
    let pan = UIPanGestureRecognizer(target: self, action: #selector(handlePanGestured(_:)))


    subview.addGestureRecognizer(pan)



    count += 1
    ht += 50
    arrTextFields.append(subview)





}

@objc func handlePanGestured(_ gesture: UIPanGestureRecognizer) {


    let draggedView = gesture.view!
    view.bringSubviewToFront(draggedView)


    let translation = gesture.translation(in: view)
    draggedView.center = CGPoint(x: draggedView.center.x + translation.x, y: draggedView.center.y + translation.y)
    gesture.setTranslation(.zero, in: view)
}

@objc func ji(sender : UISlider){
   ww = Int(sx.value)

}}

需要实现的主要思想是添加 currentView 变量以找出我们要更改的视图。

我们还需要向 select 需要更改的特定视图添加一些功能。

1) 添加变量currentView

class ViewController: UIViewController {

    ...

    var currentView: UIView?

    override func viewDidLoad() {
        super.viewDidLoad()

2) 添加 tapGestureRecognozerfunc addBOx()

@objc func addBOx() {

    ...

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

3) 添加 handleTapGestured(_:)

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

4) 更新func ji(sender: UISlider)

@objc func ji(sender: UISlider) {

    ...

    currentView?.bounds.size.width = CGFloat(sx.value)
}

所有代码:

import UIKit

class ViewController: UIViewController {

    var sx = UISlider()
    var count: Int = 0
    var ht = -90
    var ww = 80
    var arrTextFields = [UIImageView]()
    var b7 = UIButton()

    var currentView: UIView?

    override func viewDidLoad() {
        super.viewDidLoad()

        [b7,sx].forEach {
            [=14=].translatesAutoresizingMaskIntoConstraints = false
            view.addSubview([=14=])
            [=14=].backgroundColor = .systemOrange
        }

        b7.frame = CGRect(x: view.center.x-115, y: view.center.y + 200, width: 70, height: 40)
        sx.frame = CGRect(x: view.center.x-115, y: view.center.y-200, width: 70, height: 40)
        b7.addTarget(self, action: #selector(addBOx), for: .touchUpInside)
    }

    //func that adds imageview.
    @objc func addBOx() {


        let subview = UIImageView()


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



        sx.addTarget(self, action: #selector(ji), for: .valueChanged)
        sx.minimumValue = 10
        sx.maximumValue = 150

        subview.frame = CGRect(x: view.bounds.midX - 0, y: view.bounds.midY + CGFloat(ht), width: CGFloat(ww), height: 35)
        subview.backgroundColor = .purple
        subview.tag = count
        let pan = UIPanGestureRecognizer(target: self, action: #selector(handlePanGestured(_:)))


        subview.addGestureRecognizer(pan)

        count += 1
        ht += 50
        arrTextFields.append(subview)


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

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

    @objc func handlePanGestured(_ gesture: UIPanGestureRecognizer) {


        let draggedView = gesture.view!
        view.bringSubviewToFront(draggedView)


        let translation = gesture.translation(in: view)
        draggedView.center = CGPoint(x: draggedView.center.x + translation.x, y: draggedView.center.y + translation.y)
        gesture.setTranslation(.zero, in: view)
    }

    @objc func ji(sender : UISlider){
        ww = Int(sx.value)

        currentView?.bounds.size.width = CGFloat(sx.value)
    }

}

或者,您可以添加一个文本字段并写入数组中的元素需要更改的数字。

请不要在代码中使用 sx、ht、ww、b7 等变量。

您可以阅读 API 设计指南 here