Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

456
Vistas
Swift Cocoa: cambie el tamaño del marco NSScrollView con animación

El resultado que quiero lograr es este: Kext Wizard:

ingrese la descripción de la imagen aquí

Puedo cambiar el tamaño del marco pero sin ninguna animación. Aquí está mi código simple hasta ahora (no me importaba demasiado el tamaño, pero me enfocaba en la animación):

 @IBAction func disclosureButton(_ sender: Any) { if disclosureButton.state == .on { Swift.print("On") kextScroll.setFrameOrigin(kextScroll.frame.origin) kextScroll.setFrameSize(NSSize(width: 417, height: 316)) //let rectBig = NSRect(origin: kextScroll.frame.origin, size: NSSize(width: 417, height: 316)) //kextScroll.window?.setFrame(rectBig, display: true, animate: true) } else if disclosureButton.state == .off { Swift.print("Off") kextScroll.setFrameOrigin(kextScroll.frame.origin) kextScroll.setFrameSize(NSSize(width: 417, height: 200)) } }

Además, si alguien puede dar una pista sobre cómo mostrar el menú oculto a medida que se reduce el tamaño del marco, sería genial. Gracias.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Ok, el problema se resolvió al agregar NSView para que se establezca como límite. Aquí está el código completo y la imagen de Xcode

 @IBAction func disclosureButton(_ sender: Any) { let dHeight = 70 let smallOrigin = NSPoint(x: 20, y: 116) let bigOrigin = NSPoint(x: 20, y: 116-dHeight) let hideOrigin = NSPoint(x:0, y:25-dHeight) let showOrigin = NSPoint(x:0, y:25) if disclosureButton.state == .on { //hide NSAnimationContext.beginGrouping() NSAnimationContext.current.duration = 0.2 kextScroll.animator().setFrameOrigin(bigOrigin) kextScroll.animator().setFrameSize(NSSize(width: 417, height: 249+dHeight)) pathText.animator().setFrameOrigin(hideOrigin) reloadButton.animator().setFrameOrigin(NSPoint(x: 269, y:51-dHeight)) unloadButton.animator().setFrameOrigin(NSPoint(x: 347, y:51-dHeight)) exportButton.animator().setFrameOrigin(NSPoint(x: 269, y:-1-dHeight)) revealButton.animator().setFrameOrigin(NSPoint(x: 347, y:-1-dHeight)) kextLabel.animator().setFrameOrigin(NSPoint(x: 0, y:52-dHeight)) NSAnimationContext.endGrouping() } else if disclosureButton.state == .off { //show NSAnimationContext.beginGrouping() NSAnimationContext.current.duration = 0.2 kextScroll.animator().setFrameOrigin(smallOrigin) kextScroll.animator().setFrameSize(NSSize(width: 417, height: 249)) pathText.animator().setFrameOrigin(showOrigin) reloadButton.animator().setFrameOrigin(NSPoint(x: 269, y:51)) unloadButton.animator().setFrameOrigin(NSPoint(x: 347, y:51)) exportButton.animator().setFrameOrigin(NSPoint(x: 269, y:-1)) revealButton.animator().setFrameOrigin(NSPoint(x: 347, y:-1)) kextLabel.animator().setFrameOrigin(NSPoint(x: 0, y:52)) NSAnimationContext.endGrouping() } }

Entonces, el código anterior se asegura de que todos los elementos se muevan al mismo ritmo, solo se ve el gif de preguntas. Todos los elementos ocultos deben estar en un NSView pequeño para que se muestren correctamente.

código x Entonces, el elemento será invisible si está fuera de NSView. Cuando el elemento se mueve al rango de NSView, no bloqueará otros elementos en ViewController. ¡Problema resuelto!

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda