Ich habe ein Programm, in dem eine Sammelleitung geschleift wird, um jedem Bild einen CGpoint zu geben, um seine Ursprungsposition zu bestimmen und eine Schwenkgeste auf jedes Bild anzuwenden.SWIFT: CGPoint mit Bild aus Array verbinden
Mein Problem ist jedoch, dass das Bild, wenn die Schwenkgeste endet, in seine Ausgangsposition zurückschnappen sollte, die am Anfang festgelegt wurde. Aber wenn ich das tue,
if sender.state == UIGestureRecognizerState.Ended {
for image in imageCollection {
image.center = positionOrigin
}
die Bilder bewegen sich zurück zu verschiedenen Positionen/die gleichen Positionen wie die anderen Bilder. Ich nehme an, das liegt daran, dass ich keinen CGPoint-Ursprung mit jedem Bild über den Index verbunden habe (z. B. macht es Sinn, ein Wörterbuch zu benutzen?). Jemand eine Idee, wie man das löst?
Hier ist mein Code:
import UIKit
class ViewController: UIViewController, UIGestureRecognizerDelegate {
@IBOutlet var imageCollection: [UIImageView]!
var positionOrigin: CGPoint!
override func viewDidLoad() {
super.viewDidLoad()
for image in imageCollection {
positionOrigin = image.center
let recognizer = UIPanGestureRecognizer(target: self, action: #selector(ViewController.handlePan))
recognizer.delegate = self
image.addGestureRecognizer(recognizer)
}
}
func handlePan(sender:UIPanGestureRecognizer) {
let translation = sender.translationInView(self.view)
if let view = sender.view {
view.center = CGPoint(x:view.center.x + translation.x,
y:view.center.y + translation.y)
sender.setTranslation(CGPointZero, inView: self.view)
}
if sender.state == UIGestureRecognizerState.Ended {
for image in imageCollection {
image.center = positionOrigin
}
}
}
}
Ja, ich habe bereits versucht, CGPoint zu einem Array zu machen und durch beide zu iterieren, aber irgendwie stecke ich fest. Ich bekomme immer eine Fehlermeldung "Thread 1: EXC_BAD_INSTRUCTION" in der Zeile, wo ich die Bildposition angehängt habe. '@IBOutlet var imageCollection: [UIImageView]! var originPositions: [CGPoint]! Überschreibung func viewDidLoad() { super.viewDidLoad() für Bild in Imagecollection { var i = 0 originPositions.append (Imagecollection [i] .center) i + 1 = [...] } } ' – Jake2Finn
versuchen wie folgt aus: var originPositions = [CGPoint]() Überschreibung func viewDidLoad() { super.viewDidLoad() für Bild in Imagecollection { originPositions.append (image.center) } – Dasem
Ha! Jetzt funktioniert es reibungslos wie beabsichtigt. Groß! Danke vielmals! – Jake2Finn