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

问题描述 投票:0回答:1

我的快速代码使用按钮将图像视图放置在以空数组为父元素的uiviewcontroller上。问题是我不知道如何将不固定的图像视图放置在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 {
        $0.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview($0)
        $0.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)

}}

enter image description here

arrays swift slider append cgrect
1个回答
1
投票

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

我们还需要添加一些功能来选择需要更改的特定视图。

1)添加变量currentView

class ViewController: UIViewController {

    ...

    var currentView: UIView?

    override func viewDidLoad() {
        super.viewDidLoad()

2)将tapGestureRecognozer添加到func 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 {
            $0.translatesAutoresizingMaskIntoConstraints = false
            view.addSubview($0)
            $0.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)
    }

}

或者,您可以添加textField并写入数组中元素需要更改的数字。

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

您可以阅读API设计指南here

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.