добавить представление изображения в uiscrollview в бесконечном цикле - PullRequest
0 голосов
/ 10 марта 2020

Мой быстрый код ниже цели состоит в том, чтобы добавить бесконечное количество просмотров изображений в uiscrollview. При каждом вызове функции fun c add изображения должны быть разделены на 200 пикселей по оси Y. Я добавил gif ниже того, что я ищу, чтобы выполнить sh с l oop. Я должен положить [] в бар для этого.

GIF

   import UIKit

class ViewController: UIViewController {

var addBtn = UIButton()
var scrollView = UIScrollView()
var imageVV = UIImageView()



override func viewDidLoad() {
    super.viewDidLoad()

    [addBtn,scrollView,imageVV].forEach({

        view.addSubview($0)
        $0.translatesAutoresizingMaskIntoConstraints = false
    })
    addBtn.setTitle("add", for: .normal)



    addBtn.backgroundColor = .green
    imageVV.backgroundColor = .red
    scrollView.contentSize.height = 1000

    scrollView.isUserInteractionEnabled = true

    scrollView.backgroundColor = .blue
    scrollView.addSubview(imageVV)

    NSLayoutConstraint.activate([


        imageVV.centerXAnchor.constraint(equalTo: view.centerXAnchor, constant: 0),

        imageVV.topAnchor.constraint(equalTo: scrollView.topAnchor, constant : 0),
        imageVV.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.5, constant: 0),
        imageVV.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.10, constant: 0),








        scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0),
        scrollView.topAnchor.constraint(equalTo: view.topAnchor, constant : 0),
        scrollView.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 1, constant: 0),
        scrollView.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.90, constant: 0),









        addBtn.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0),
        addBtn.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant : 0),
        addBtn.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 1.0, constant: 0),
        addBtn.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.10, constant: 0),




    ] )


    addBtn.addTarget(self, action: #selector(add), for: .touchDown)


}

@objc func add(){
    NSLayoutConstraint.activate([



    ])


}


}

Ответы [ 2 ]

0 голосов
/ 10 марта 2020
class ViewController: UIViewController{

    fileprivate var  lastImage:UIImageView?
    fileprivate var mainViewBootom:NSLayoutConstraint?


    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .white
        setupVIew()
    }

    override func viewDidAppear(_ animated: Bool) {
        scrollView.contentSize = CGSize(width: view.frame.width, height: mainView.frame.height)
        view.layoutIfNeeded()
    }

    //MARK: Components
    let scrollView:UIScrollView = {
        let sv = UIScrollView(frame: .zero)
        return sv
    }()

    let mainView:UIView = {
        let uv = UIView()
        uv.backgroundColor = .white
        return uv
    }()

    let btnAdd:UIButton = {
        let btn = UIButton(type: .system)
        btn.setTitle("Add", for: .normal)
        return btn
    }()

    //MARK: Setup UI
    func setupVIew() {
        view.addSubview(scrollView)
        view.addSubview(btnAdd)

        scrollView.translatesAutoresizingMaskIntoConstraints = false
        btnAdd.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            btnAdd.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            btnAdd.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -12),
            btnAdd.widthAnchor.constraint(equalToConstant: 100),
            btnAdd.heightAnchor.constraint(equalToConstant: 45),

            scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            scrollView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
            scrollView.bottomAnchor.constraint(equalTo: btnAdd.topAnchor , constant: -12),
        ])
        btnAdd.addTarget(self, action: #selector(didClickedAdd), for: .touchUpInside)

        scrollView.addSubview(mainView)
        mainView.translatesAutoresizingMaskIntoConstraints = false

        NSLayoutConstraint.activate([
            mainView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            mainView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            mainView.topAnchor.constraint(equalTo: scrollView.topAnchor),
        ])

        let imgView = UIImageView(frame: CGRect(x: 0, y: 0, width: 150, height: 100))
        imgView.backgroundColor  = .red
        mainView.addSubview(imgView)
        imgView.translatesAutoresizingMaskIntoConstraints = false
        imgView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        imgView.widthAnchor.constraint(equalToConstant: 150).isActive = true
        imgView.heightAnchor.constraint(equalToConstant: 100).isActive = true

        if lastImage != nil {
            imgView.topAnchor.constraint(equalTo: lastImage!.bottomAnchor , constant: 20).isActive = true
        }else{
            imgView.topAnchor.constraint(equalTo: mainView.topAnchor , constant: 12).isActive = true
        }
        lastImage = imgView
        mainViewBootom = mainView.bottomAnchor.constraint(equalTo: lastImage!.bottomAnchor , constant: 12)
        mainViewBootom!.isActive = true
    }

    @objc func didClickedAdd(){
        let imgView = UIImageView(frame: CGRect(x: 0, y: 0, width: 150, height: 100))
        imgView.backgroundColor  = .red
        mainView.addSubview(imgView)
        imgView.translatesAutoresizingMaskIntoConstraints = false
        imgView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        imgView.widthAnchor.constraint(equalToConstant: 150).isActive = true
        imgView.heightAnchor.constraint(equalToConstant: 100).isActive = true

        if lastImage != nil {
            imgView.topAnchor.constraint(equalTo: lastImage!.bottomAnchor , constant: 20).isActive = true
        }else{
            imgView.topAnchor.constraint(equalTo: mainView.topAnchor , constant: 12).isActive = true
        }
        lastImage = imgView
        mainView.removeConstraint(mainViewBootom!)
        mainViewBootom = mainView.bottomAnchor.constraint(equalTo: lastImage!.bottomAnchor , constant: 12)
        mainViewBootom!.isActive = true
        view.layoutIfNeeded()
        scrollView.contentSize = CGSize(width: view.frame.width, height: mainView.frame.height)
        view.layoutIfNeeded()

    }


}

`result

0 голосов
/ 10 марта 2020

Вы должны рассмотреть возможность использования CollectionView для этого. Таким образом, вы можете добавить бесконечное количество ячеек - это может быть ваше изображение или что угодно. Вы можете установить расстояние между ячейками в 200px или что-либо еще.

Каждый раз, когда вы нажимаете на add, вы просто добавляете новую запись в массив, который вы используете для CollectionView и collectionView.reloadData(), чтобы обновить пользовательский интерфейс.

Надежды, которые помогают, удачи!

...