Je veux avoir une vue dans laquelle il y a des véhicules qui circulent que l'utilisateur peut également glisser-déposer. Quelle est selon vous la meilleure stratégie à grande échelle pour y parvenir? Est-il préférable d'obtenir des événements tactiles à partir des vues représentant les véhicules ou d'une vue plus large? Y a-t-il un paradigme simple que vous avez utilisé pour le glisser-déposer qui vous satisfait? Quels sont les inconvénients des différentes stratégies?
93
Réponses:
Supposons que vous ayez une
UIView
scène avec une image d'arrière-plan et beaucoupvehicles
, vous pouvez définir chaque nouveau véhicule comme unUIButton
(UIImageView fonctionnera probablement aussi):Ensuite, vous pouvez déplacer le véhicule où vous le souhaitez, en répondant à l'
UIControlEventTouchDragInside
événement, par exemple:Il est beaucoup plus facile pour un véhicule individuel de gérer ses propres traînées, comparativement à la gestion de la scène dans son ensemble.
la source
En plus de la réponse d'Ohho, j'ai essayé une implémentation similaire, mais sans problème de glissement "rapide" et de centrage pour faire glisser.
L'initialisation du bouton est ...
et mise en œuvre de la méthode:
Je ne dis pas que c'est la solution parfaite pour la réponse. Néanmoins, j'ai trouvé que c'était la solution la plus simple pour faire glisser.
la source
J'ai eu un cas où je voudrais faire glisser / déposer des uiviews entre plusieurs autres uiviews. Dans ce cas, j'ai trouvé la meilleure solution pour tracer les événements de panoramique dans une super vue contenant toutes les zones de dépôt et tous les objets de pignon de glissement. La principale raison pour ne PAS ajouter les écouteurs d'événements aux vues déplacées réelles était que j'ai perdu les événements de panoramique en cours dès que j'ai changé la vue supervisée pour la vue déplacée.
Au lieu de cela, j'ai mis en œuvre une solution de glisser-déposer plutôt générique qui pourrait être utilisée sur une ou plusieurs zones de dépôt.
J'ai créé un exemple simple qui peut être vu ici: Faites glisser un uiviews de dépôt entre plusieurs autres uiviews
Si vous décidez d'aller dans l'autre sens, essayez d'utiliser uicontrol au lieu de uibutton. Ils déclarent les méthodes addTarget et sont beaucoup plus faciles à étendre - donc donnent un état et un comportement personnalisés.
la source
Je suivrais en fait le glissement sur la vue du véhicule elle-même, plutôt que sur la vue large - à moins qu'il n'y ait une raison particulière de ne pas le faire.
Dans un cas où j'autorise l'utilisateur à placer des éléments en les faisant glisser sur l'écran. Dans ce cas, j'ai expérimenté à la fois la possibilité de faire glisser la vue de dessus et les vues enfants . J'ai trouvé que c'est un code plus propre si vous ajoutez quelques vues "déplaçables" à l'UIView et comment vous pouvez les faire glisser. J'ai utilisé un simple rappel à l'UIView parent pour vérifier si le nouvel emplacement était approprié ou non - afin que je puisse indiquer avec des animations.
Faire glisser la piste de la vue de dessus est aussi bien, je suppose, mais cela le rend légèrement plus compliqué si vous souhaitez ajouter des vues non déplaçables qui interagissent toujours avec l'utilisateur, comme un bouton.
la source
la source
La réponse d'Ohho a bien fonctionné pour moi. Si vous avez besoin de la version swift 2.x:
la source
Voici la meilleure façon de faire du glisser-déposer à partir d'iOS 11:
https://developer.apple.com/documentation/uikit/drag_and_drop/adopting_drag_and_drop_in_a_custom_view
la source
Pour Swift 4 Le moyen le plus simple et le plus simple. 😛
Étape 1: Connectez votre bouton du Storyboard à View Controller. Et définir toutes les contraintes de base de mise en page automatique
Étape 2: Ajouter un mouvement de panoramique pour votre bouton dans viewDidLoad ()
Étape 3:
Ajouter panGestureHandler
Et maintenant votre action de bouton
Ajouter Voir le résultat ☝️
la source