在无限循环中添加放置在 uiscrollview 上的图像视图
add image view placed on uiscrollview in a infinite loop
我的 swift 下面的代码目标是向 uiscrollview 添加无穷无尽的图像视图。每次调用 func add 时,图像视图应在 y 轴上分开 200 像素。我在下面添加了一个 gif,展示了我希望通过循环完成的工作。我想我必须为此把 [] 放在栏中。
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([=10=])
[=10=].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([
])
}
}
您应该考虑为此使用 CollectionView
。
通过这种方式,您可以添加无数个单元格 - 可以是您的图像或任何您想要的。
您可以将单元格之间的距离设置为 200 像素或其他任何值。
每次点击添加时,您只需向用于 CollectionView
和 collectionView.reloadData()
的数组添加一个新条目即可更新 UI。
希望对你有所帮助,祝你好运!
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()
}
}
`
我的 swift 下面的代码目标是向 uiscrollview 添加无穷无尽的图像视图。每次调用 func add 时,图像视图应在 y 轴上分开 200 像素。我在下面添加了一个 gif,展示了我希望通过循环完成的工作。我想我必须为此把 [] 放在栏中。
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([=10=])
[=10=].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([
])
}
}
您应该考虑为此使用 CollectionView
。
通过这种方式,您可以添加无数个单元格 - 可以是您的图像或任何您想要的。
您可以将单元格之间的距离设置为 200 像素或其他任何值。
每次点击添加时,您只需向用于 CollectionView
和 collectionView.reloadData()
的数组添加一个新条目即可更新 UI。
希望对你有所帮助,祝你好运!
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()
}
}
`