Quiero tener una vista en la que haya vehículos circulando y que el usuario también pueda arrastrar y soltar. ¿Cuál cree que es la mejor estrategia a gran escala para hacer esto? ¿Es mejor obtener eventos táctiles desde las vistas que representan los vehículos o desde la vista más grande? ¿Existe un paradigma simple que haya utilizado para arrastrar y soltar con el que esté satisfecho? ¿Cuáles son los inconvenientes de las diferentes estrategias?
93
Respuestas:
Suponga que tiene una
UIView
escena con una imagen de fondo y muchasvehicles
, puede definir cada vehículo nuevo como unUIButton
(UIImageView probablemente también funcionará):Luego, puede mover el vehículo a donde desee, respondiendo al
UIControlEventTouchDragInside
evento, por ejemplo:Es mucho más fácil para un vehículo individual manejar sus propios arrastres, en comparación con el manejo de la escena como un todo.
fuente
Además de la respuesta de ohho, he probado una implementación similar, pero sin problema de arrastre "rápido" y centrado para arrastrar.
La inicialización del botón es ...
e implementación del método:
No digo que esta sea la solución perfecta para la respuesta. Sin embargo, encontré que esta es la solución más fácil para arrastrar.
fuente
Tuve un caso en el que me gustaría arrastrar / soltar uiviews entre varias otras uiviews. En ese caso, encontré la mejor solución para rastrear los eventos de panorámica en una supervista que contiene todas las zonas de colocación y todos los objetos de hastial de arrastre. La razón principal para NO agregar los oyentes de eventos a las vistas arrastradas reales fue que perdí los eventos panorámicos en curso tan pronto como cambié la supervista para la vista arrastrada.
En su lugar, implementé una solución de arrastrar y soltar bastante genérica que podría usarse en una o varias zonas de colocación.
He creado un ejemplo simple que se puede ver aquí: Arrastre una vista de uiviews entre varias otras uiviews
Si decide hacer lo contrario, intente usar uicontrol en lugar de uibutton. Declaran los métodos addTarget y son mucho más fáciles de extender; por lo tanto, dan un estado y comportamiento personalizados.
fuente
De hecho, rastrearía el arrastre en la vista del vehículo en sí, en lugar de la vista grande, a menos que haya una razón particular para no hacerlo.
En un caso en el que permito al usuario colocar elementos arrastrándolos en la pantalla. En ese caso, experimenté con que tanto la vista superior como la vista secundaria se pudieran arrastrar. Encontré que es un código más limpio si agrega algunas vistas "arrastrables" a la UIView y maneja cómo se pueden arrastrar. Usé una simple devolución de llamada al UIView principal para verificar si la nueva ubicación era adecuada o no, para poder indicar con animaciones.
Tener la pista de la vista superior arrastrando, supongo, es tan bueno, pero eso lo hace un poco más complicado si desea agregar vistas que no se pueden arrastrar y que aún interactúan con el usuario, como un botón.
fuente
fuente
La respuesta de ohho funcionó bien para mí. En caso de que necesite la versión rápida 2.x:
fuente
Esta es la mejor manera de arrastrar y soltar a partir de iOS 11:
https://developer.apple.com/documentation/uikit/drag_and_drop/adopting_drag_and_drop_in_a_custom_view
fuente
Para Swift 4 Fácil y sencillo. 😛
Paso 1: conecte su botón desde el guión gráfico para ver el controlador. Y establecer todas las restricciones básicas de autodiseño
Paso 2: agregue Pan Gesture para su botón en viewDidLoad ()
Paso 3:
Agregar panGestureHandler
Y ahora tu acción de botón
Agregar Ver el resultado ☝️
fuente