2016-08-29 5 views
0

Ich mache eine Anwendung, die gestureRecognizer verwenden, um einige view mit Berührung zu ziehen. Nachrichtenpositionen werden jedoch nicht gespeichert und ich weiß wirklich nicht, wie ich sie bekommen soll.
erstens, ich benutze diese gestureRcognizer meiner view zu bewegen:Koordinaten speichern oder Rahmen aktualisieren

func glisserDeposerNote(sender : UIPanGestureRecognizer) { 
    let note1 = sender.view! 
    let touchCoordinates = sender.locationInView(self.scrollview) 
    note1.center = touchCoordinates 
    self.viewnote1.translatesAutoresizingMaskIntoConstraints = true 
} 

Zweitens habe ich versucht, CGPoint-NSData zu konvertieren, aber ich weiß nicht, wie es danach zu speichern:

let points = touchCoordinates 
let pointObj = NSValue(CGPoint: points) 
let defaults = NSUserDefaults.standardUserDefaults() 
defaults.setObject(pointObj, forKey: "coord1") 

Aber Das führt zum Absturz, wenn ich versuche, die Ansicht zu verschieben. Ich bemerkte, dass es weil defaults.setObject... ist, aber ich weiß wirklich nicht warum.

+0

Try setValue statt setObject verwenden. –

+0

nicht funktionieren, stürzt wieder ab :( – Matt

Antwort

1

Es scheint, dass der CGPoint-Wert für Benutzerstandardwerte nicht unterstützt wird. Versuchen Sie, es in String und dann zurück zu konvertieren. Du hast die Werkzeuge dafür. Beispiel:

let pointValue = NSStringFromCGPoint(CGPoint(x: 0.1, y: 1.0)) 
NSUserDefaults.standardUserDefaults().setValue(pointValue, forKey: "coord1") 
let point = CGPointFromString(NSUserDefaults.standardUserDefaults().valueForKey("coord1") as! String) 
+0

Danke, dieser Code stürzt nicht meine App, aber die Position wird nicht gespeichert. Allerdings habe ich es in ViewDidLoad: 'lassen punkteaved = CGPointFromString (NSUserDefaults.standardUserDefaults(). valueForKey ("coord1") als! String) ' ' note1.center = pointaved' – Matt

+0

Sie müssen die Benutzereinstellungen zu einem bestimmten Zeitpunkt synchronisieren, um sie zu speichern.Sie können das tun, nachdem Sie sie in Ihrem Fall festgelegt haben, aber versuchen Sie es wenn es Sinn macht wegen eventueller Performance-Probleme –

+0

Auch versuchen, Kraftauspacken zu vermeiden (die! -s) –

0

Schließlich fand ich, dass: UIView won't move correctly on ViewDidLoad

Also ich override func viewDidLayoutSubviews()

+0

Es sollte sich korrekt in der Ansicht verschoben wurde geladen, aber es muss ohne Einschränkungen sein, in der Regel programmgesteuert generiert. Eine andere Möglichkeit besteht darin, die führende Am-Top-Beschränkung für die Ansicht festzulegen und die Einschränkungen zu bearbeiten, anstatt den Ansichtsrahmen/Mittelpunkt festzulegen. Oder noch eine andere, um die Ansicht zu transformieren, um eine von dem Punkt erzeugte Übersetzung zu sein. –

Verwandte Themen