2016-09-04 2 views
1

J'essaie de mettre à jour plusieurs images en cliquant et en glissant sur les éléments. J'ai implémenté des touchers, des touchers, et des touchends, mais je ne sais pas comment faire des effets multiples.Touchesmoved - mise à jour de plusieurs éléments en un seul glisser

J'ai parcouru le Web, mais je n'ai trouvé aucun guide à ce sujet. Si vous pouviez me diriger dans la bonne direction ou me donner des conseils de base, ce serait grandement apprécié.

Voici un exemple d'image:

Edit: Voici un exemple d'image de ce qui devrait être possible:

What it should look like.

Je voudrais être en mesure d'effet les autres lettres de la même manière à travers la même presse, en changeant leurs images. Ces images sont des images temporaires.

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    print("touches began:\(touches)") 
} 

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { 
      self.image = UIImage(named: "slot")! 
     print("touches moved:\(touches)") 
    } 

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     self.image = UIImage(named: "tile")! 
     print("touches ended") 
    } 
+0

Avez-vous des gifs comment ça marche? – iyuna

+0

La façon dont cela devrait fonctionner est que vous faites glisser votre doigt sur chacun des éléments et il les change de l'image comme E à l'image comme S pour chacun d'eux et obtient également la valeur de chacune des lettres. J'ai trouvé un article qui dit qu'il serait peut-être souhaitable de le faire à la superview ci-dessus? J'ai ajouté un exemple de ce à quoi cela devrait ressembler. – Apocal

Répondre

1

Si je vous ai bien compris, cela devrait être quelque chose comme ceci:

class ChangableView: UIView { 
    private var touchedImageView: UIImageView? { 
     didSet { 
      if oldValue == touchedImageView { return } 
      if let oldValue = oldValue { 
       oldValue.image = UIImage(named: "tile")! 
      } 
      if let newValue = touchedImageView { 
       newValue.image = UIImage(named: "slot")! 
      } 
     } 
    } 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     guard let touch = touches.first else { return } 
     updateTouchedImageViewWithTouch(touch, event: event) 
    } 

    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     guard let touch = touches.first else { return } 
     updateTouchedImageViewWithTouch(touch, event: event) 
    } 

    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     touchedImageView = nil 
    } 
} 

private extension ChangableView { 
    func updateTouchedImageViewWithTouch(touch: UITouch, event: UIEvent?) { 
     let touchPoint = touch.locationInView(self) 
     let touchedView = self.hitTest(touchPoint, withEvent: event) 
     touchedImageView = touchedView as? UIImageView 
    } 
} 

De plus, votre UIViewController devrait avoir vue une sous-classe de ChangableView et ne pas oublier de définir la propriété userInteractionEnabled à tous les UIImageViews à YES.

+0

Merci Lyuna. – Apocal