Eu tenho um UIImageView
, que eu quero poder redimensionar e girar etc.
Pode UIGestureRecognizer
ser adicionado ao UIImageView
?
Gostaria de adicionar um reconhecedor de rotação e pitada para um UIImageView
que seria criado em tempo de execução.
Como alguém adiciona esses reconhecedores?
userInteractionEnabled
ainda tem de ser definido para SIM / verdadeiro no Xcode 8 Objectivo-C / SwiftSim, um UIGestureRecognizer pode ser adicionado a um UIImageView. Conforme indicado na outra resposta, é muito importante lembrar de ativar a interação do usuário na visualização da imagem, definindo sua
userInteractionEnabled
propriedade comoYES
. UIImageView herda de UIView, cuja propriedade de interação do usuário é definida comoYES
padrão, no entanto, a propriedade de interação do usuário de UIImageView é definida comoNO
padrão.Nos documentos do UIImageView:
Enfim, na maior parte da resposta. Aqui está um exemplo de como criar a
UIImageView
com aUIPinchGestureRecognizer
, aUIRotationGestureRecognizer
e aUIPanGestureRecognizer
.Primeiro, em
viewDidLoad
ou em outro método de sua escolha, crie uma visualização de imagem, forneça uma imagem, um quadro e ative a interação do usuário. Em seguida, crie os três gestos da seguinte maneira. Certifique-se de utilizar a propriedade delegada (provavelmente definida como auto). Isso será necessário para usar vários gestos ao mesmo tempo.Aqui estão os três métodos que serão chamados quando os gestos em sua exibição forem detectados. Dentro deles, verificaremos o estado atual do gesto e, se ele estiver iniciado ou alterado
UIGestureRecognizerState
, leremos a propriedade de escala / rotação / tradução do gesto, aplicaremos esses dados a uma transformação afim, aplicaremos a transformação afim à imagem visualizar e, em seguida, redefinir a escala de gestos / rotação / translação.Finalmente e muito importante, você precisará utilizar o método UIGestureRecognizerDelegate
gestureRecognizer: shouldRecognizeSimultaneouslyWithGestureRecognizer
para permitir que os gestos funcionem ao mesmo tempo. Se esses três gestos são os únicos três que têm essa classe atribuída como delegada, basta retornarYES
como mostrado abaixo. No entanto, se você tiver gestos adicionais que tenham essa classe atribuída como delegada, poderá ser necessário adicionar lógica a esse método para determinar qual gesto é o que antes de permitir que todos trabalhem juntos.Não se esqueça de garantir que sua classe esteja em conformidade com o protocolo UIGestureRecognizerDelegate . Para fazer isso, verifique se sua interface se parece com isso:
Se você preferir jogar com o código em um projeto de exemplo funcional, o projeto de exemplo que eu criei contendo esse código pode ser encontrado aqui.
fonte
Swift 4.2
e quando tocado:
fonte
Solução Swift 2.0
Você cria um reconhecedor de gesto para tocar, apertar ou deslizar na mesma mansão. Abaixo, mostrarei 4 etapas para colocar o reconhecedor em funcionamento.
4 Passos
1.) Herde de
UIGestureRecognizerDelegate
adicionando-o à sua assinatura de classe.2.) Controle o arrasto da sua imagem para o seu viewController para criar um IBOutlet:
3.) No seu viewDidLoad, adicione o seguinte código:
4.) Crie a função que será chamada quando tocar no reconhecedor de gestos. (Você pode excluir o
= nil
se você escolher).Seu código final deve ser algo como isto:
fonte
Acabei de fazer isso com o swift4 adicionando 3 gestos em uma única exibição
Aqui meu código de exemplo
Qualquer pergunta, basta digitar para comentar. obrigado
fonte
Exemplo SWIFT 3
Nenhum representante do recongnizer de gestos ou outras implementações, quando necessário.
fonte
Você também pode arrastar um reconhecedor de gestos para a visualização da imagem
Storyboard
. Em seguida, crie uma açãoctrl + drag
para o código.fonte
Para o amante de Blocos, você pode usar ALActionBlocks para adicionar ação de gestos em bloco
fonte