es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Múltiples etiquetas mostradas de forma programática.

Soy nuevo en Swift y quiero aprender cómo mostrar seis etiquetas una al lado de la otra de forma programática. Tengo el código para mostrar un solo objeto, pero no sé cómo expandirlo para más objetos. A continuación se muestra el código que tengo:

“`import UIKit

class ViewController: UIViewController {

<pre><code>// 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()
// Agregar a la jerarquía de vistas
view.addSubview(pannableView) // Esto crea el objeto, cómo enviar más de un objeto

pannableView.center = view.center

// Inicializar el reconocedor de gestos de deslizamiento
let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(didPan(_:)))

// Agregar el reconocedor de gestos de deslizamiento
pannableView.addGestureRecognizer(panGestureRecognizer)
}

// MARK: –
private let pannableView: UIView = {
// Inicializar la vista
let view = UIView(frame: CGRect(origin: .zero, size: CGSize(width: 80.0, height: 80.0))) // Qué tan grande es el objeto

// Configurar la vista
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
}
}
</code></pre>

}
“`

Asumo que necesito definir todas las etiquetas que he creado, pero cuando se trata de pannableView, solo mostrará “label1”. He visto algunos mensajes que implican hacer una tabla, pero no creo que esto funcione porque necesito arrastrar la etiqueta por toda la pantalla. Cualquier consejo será muy apreciado.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para mostrar seis etiquetas una al lado de la otra de forma programática, puedes seguir los siguientes pasos:

    1. Define tus seis etiquetas de manera similar a como se ha definido label1, pero dándoles diferentes posiciones (CGPoint) para mostrarlas una al lado de la otra en la pantalla.
    2. En lugar de crear una sola instancia de UIView (pannableView), necesitas crear seis instancias, una para cada etiqueta. Puedes crear seis instancias separadas de UIView o usar un array para almacenarlas todas.

    3. Para mostrar estas seis etiquetas, necesitas agregarlas a la jerarquía de vistas. Puedes usar un bucle para agregar cada instancia de etiqueta a la jerarquía de vistas. Modifica tu método viewDidLoad de la siguiente manera:

    override func viewDidLoad() {
        super.viewDidLoad()
    
        // Inicializar el reconocedor de gestos de deslizamiento
        let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(didPan(_:)))
    
        for label in [label1, label2, label3, label4, label5, label6] {
            // Crear una nueva vista para cada etiqueta
            let labelView = UIView(frame: CGRect(origin: label, size: CGSize(width: 80.0, height: 80.0)))
            // Configurar la vista
            labelView.backgroundColor = .blue
            labelView.translatesAutoresizingMaskIntoConstraints = false
            // Agregar el reconocedor de gestos de deslizamiento a cada vista de etiqueta
            labelView.addGestureRecognizer(panGestureRecognizer)
            // Agregar la vista de etiqueta a la jerarquía de vistas principal
            view.addSubview(labelView)
        }
    }
    

    En el código anterior, inicializamos el reconocedor de gestos de deslizamiento solo una vez y luego lo agregamos a cada instancia de vista de etiqueta. Esto te permitirá arrastrar cada etiqueta según sea necesario.

    Espero que esto te ayude a mostrar seis etiquetas una al lado de la otra de forma programática.

Comments are closed.