Imaginez un écran iOS où vous pouvez déplacer votre doigt haut/bas faire quelque chose (imaginez dire, « l'échelle »),Résumé de reconnaissance de geste à deux fonctions dans Swift?
Ou,
en fonction séparée, vous pouvez déplacer votre doigt gauche/droite pour faire quelque chose (imaginez dire, "changer de couleur" ou "tourner").
Ils sont
séparés
fonctions, vous ne pouvez faire un à au moment. Donc, s'il "commence comme" une version horizontale, il reste seulement une version horizontale. Inversement, s'il "commence comme" une version verticale, il ne reste qu'une version verticale.
Il est un peu difficile à faire, je vous présente exactement comment le faire ci-dessous ... le modèle fondamental est:
if (r.state == .Began || panway == .WasZeros)
{
prev = tr
if (tr.x==0 && tr.y==0)
{
panway = .WasZeros
return
}
if (abs(tr.x)>abs(tr.y)) ... set panway
}
Cela fonctionne très bien et est ici exactement comment le faire à Swift .
Dans le storyboard, prenez un UIPanGestureRecognizer
, faites-le glisser vers la vue en question. Connectez le délégué au contrôleur de vue et mettre la sortie à cet appel ultraPan:
enum Panway
{
case Vertical
case Horizontal
case WasZeros
}
var panway:Panway = .Vertical
var prev:CGPoint!
@IBAction func ultraPan(r:UIPanGestureRecognizer!)
{
let tr = r.translationInView(r.view)
if (r.state == .Began || panway == .WasZeros)
{
prev = tr
if (tr.x==0 && tr.y==0)
{
panway = .WasZeros
return
}
if (abs(tr.x)>abs(tr.y))
{
panway = .Horizontal
}
else
{
panway = .Vertical
}
}
if (panway == .Horizontal) // your left-right function
{
var h = tr.x - prev.x
let sensitivity:CGFloat = 50.0
h = h/sensitivity
// adjust your left-right function, example
someProperty = someProperty + h
}
if (panway == .Vertical) // bigger/smaller
{
var v = tr.y - prev.y
let sensitivity:CGFloat = 2200.0
v = v/sensitivity
// adjust your up-down function, example
someOtherProperty = someOtherProperty + v
}
prev = tr
}
C'est très bien.
Mais il serait sûrement préférable de faire une nouvelle sous-classe (ou quelque chose) de UIPanGestureRecognizer, afin qu'il y ait deux nouveaux concepts ......
UIHorizontalPanGestureRecognizer
UIVerticalPanGestureRecognizer
Ce serait essentiellement de un Panneaux dimensionnels.
Je n'ai absolument aucune idée si vous ... sous-classe les délégués? ou la classe? (Quelle classe?), Ou peut-être une sorte d'extension ... En effet, je suis fondamentalement complètement désemparés sur ce :)
L'objectif est dans un code de, vous pouvez avoir quelque chose comme ça ...
@IBAction func horizontalPanDelta(..?)
{
someProperty = someProperty + delta
}
@IBAction func verticalPanDelta(..?)
{
otherProperty = otherProperty + delta
}
Comment hériter/étendre UIPanGestureRecognizer
de cette façon?
@Joe, pour répondre à la question, s'il vous plaît donner une réponse quant à la façon dont il a résolu ou n'a pas résolu votre problème. –
Bonjour @adamH. - de retour avec vous dès que possible! Je n'ai pas encore eu la chance .... – Fattie
Je pensais juste que j'ajouterais que vous devrez peut-être utiliser la méthode déléguée du détecteur de mouvement pour les laisser reconnaître simultanément. –