【发布时间】:2022-01-24 00:12:08
【问题描述】:
我是 Swift 的新手,我想学习如何以编程方式并排显示六个标签。我有显示单个对象的代码,但我不知道如何为更多对象扩展它。我的代码如下
class ViewController: UIViewController {
// MARK: - Properties
private var label1: CGPoint = CGPoint(x: 1000, y: 100)
private var label2: CGPoint = CGPoint(x: 150, y: 150)
private var label3: CGPoint = CGPoint(x: 200, y: 200)
private var label4: CGPoint = CGPoint(x: 250, y: 250)
private var label5: CGPoint = CGPoint(x: 300, y: 300)
private var label6: CGPoint = CGPoint(x: 350, y: 350)
// MARK: - View Life Cycle
override func viewDidLoad() {
super.viewDidLoad()
// Add to View Hierarchy
view.addSubview(pannableView) //This creates the object, how to send more than one object
pannableView.center = view.center
// Initialize Swipe Gesture Recognizer
let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(didPan(_:)))
// Add Swipe Gesture Recognizer
pannableView.addGestureRecognizer(panGestureRecognizer)
}
// MARK: -
private let pannableView: UIView = {
// Initialize View
let view = UIView(frame: CGRect(origin: .zero, size: CGSize(width: 80.0, height: 80.0))) //How big the object is
// Configure View
view.backgroundColor = .blue
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
// MARK: - Actions
@objc private func didPan(_ sender: UIPanGestureRecognizer) {
switch sender.state {
case .began:
label1 = pannableView.center
case .changed:
let translation = sender.translation(in: view)
pannableView.center = CGPoint(x: label1.x + translation.x,
y: label1.y + translation.y)
default:
break
}
}
}
我假设我需要定义我所做的所有标签,但是当它进入 pannableView 时,它只会显示“label1”。我看过一些涉及制作表格的帖子,但我认为这不起作用,因为我需要将标签拖到整个屏幕上。非常感谢任何建议。
【问题讨论】:
-
你的代码是一团乱麻。您有一堆名为 label1、label2 的变量,它们不包含标签,它们包含 CGRect 值。您似乎从未使用最初放入这些变量中的值,然后您只对变量
label1做某事。您有一个设置为包含单个 UIView 的 var pannableView。您有将平移手势识别器添加到单个 pannableView 的代码。你没有告诉我们那个平移手势识别器应该做什么。用户是否应该能够在屏幕上拖动视图? -
您需要为自己明确定义您想要做什么,然后如果我们要帮助您实现它,您需要在您的问题中解释这一点。
-
@DuncanC,我为我的混乱代码道歉;我还在快速学习。要回答您的问题,是的,用户应该在屏幕上拖动视图。正如您所提到的,我不使用我坚持使用的其他变量。 pannableView 只包含一个 UIView,但我不知道如何扩展它以包含多个 UIView。我将如何做到这一点?
-
您希望标签视图最初如何在屏幕上布局?此外,如果您希望它们的位置在用户拖动它们时“粘住”,您将需要让您的代码调整它们的布局约束。
-
@DuncanC 基本上,我希望它们最初位于屏幕的右侧,然后可以拖动到任何地方。如果你能让我知道如何让 pannableView 包含多个 UIView,那将是一个很好的第一步。我不指望你给我一切。尽管
let view = UIView(frame: CGRect(origin: .zero, size: CGSize(width: 80.0, height: 80.0)))似乎确实忽略了这一点,并且在我运行程序时将 UIView 对象放在了中心,但我已经确定了顶部的 CGPoint
标签: ios swift label viewdidload