Desejo ter uma visão na qual existem veículos circulando que o usuário também pode arrastar e soltar. Qual você acha que é a melhor estratégia em grande escala para fazer isso? É melhor obter eventos de toque nas visualizações que representam os veículos ou em uma visualização maior? Existe um paradigma simples que você usou para arrastar e soltar e com o qual está satisfeito? Quais são as desvantagens das diferentes estratégias?
93
Respostas:
Suponha que você tenha uma
UIView
cena com uma imagem de fundo e muitasvehicles
, você pode definir cada novo veículo como umUIButton
(UIImageView provavelmente funcionará também):Então você pode mover o veículo para onde quiser, respondendo ao
UIControlEventTouchDragInside
evento, por exemplo:É muito mais fácil para um veículo individual lidar com seus próprios arrastos do que gerenciar a cena como um todo.
fonte
Além da resposta de ohho, tentei uma implementação semelhante, mas sem problema de arrastar "rápido" e centralizar para arrastar.
A inicialização do botão é ...
e implementação do método:
Não digo que essa seja a solução perfeita para a resposta. Mesmo assim, achei esta a solução mais fácil para arrastar.
fonte
Tive um caso em que gostaria de arrastar / soltar uiviews entre várias outras uiviews. Nesse caso, encontrei a melhor solução para rastrear os eventos de panorâmica em uma supervisão contendo todas as zonas de soltar e todos os objetos de empena de arrasto. O principal motivo para NÃO adicionar os ouvintes de evento às visualizações arrastadas reais foi que perdi os eventos de panorâmica em andamento assim que alterei a visualização pela visualização arrastada.
Em vez disso, implementei uma solução de arrastar e soltar bastante genérica que poderia ser usada em uma ou várias zonas para soltar.
Eu criei um exemplo simples que pode ser visto aqui: Arraste e solte uiviews entre várias outras uiviews
Se você decidir ir por outro caminho, tente usar uicontrol em vez de uibutton. Eles declaram os métodos addTarget e são muito mais fáceis de estender - portanto, fornecem estado e comportamento personalizados.
fonte
Na verdade, eu rastrearia o arrastar na própria visualização do veículo , em vez da visualização grande - a menos que haja um motivo específico para não fazê-lo.
Em um caso em que permito que o usuário coloque itens arrastando-os na tela. Nesse caso, experimentei fazer com que a vista superior e a vista secundária fossem arrastáveis. Descobri que é um código mais limpo se você adicionar algumas visualizações "arrastáveis" ao UIView e controlar como elas podem ser arrastadas. Usei um retorno de chamada simples para o UIView pai para verificar se o novo local era adequado ou não - para que eu pudesse indicar com animações.
Suponho que ter a trilha da vista superior arrastando também é bom, mas isso torna um pouco mais confuso se você gostaria de adicionar visualizações não arrastáveis que ainda interagem com o usuário, como um botão.
fonte
fonte
a resposta do ohho funcionou bem para mim. Caso você precise da versão 2.x rápida:
fonte
Esta é a melhor maneira de arrastar e soltar a partir do iOS 11:
https://developer.apple.com/documentation/uikit/drag_and_drop/adopting_drag_and_drop_in_a_custom_view
fonte
Para Swift 4 Maneira fácil e mais fácil. 😛
Etapa 1: conecte o botão do storyboard para visualizar o controlador. E definir todas as restrições básicas do AutoLayout
Etapa 2: adicionar gesto panorâmico para o botão em viewDidLoad ()
Etapa 3:
Adicionar panGestureHandler
E agora o seu botão de ação
Adicionar Veja o Resultado ☝️
fonte