ios - Saving Y position of UIViewSubclass Does not Have member Named Error -
im trying save position of uiview subclass moved via pan gesture recogniser , needs stay in position
the uiview subclass movesection
required init(coder adecoder: nscoder) { super.init(coder: adecoder) var pangesture = uipangesturerecognizer(target: self, action:selector("reposition:")) self.addgesturerecognizer(pangesture) let yposition = self.frame.origin.y } func reposition(recognizer: uipangesturerecognizer) { let translation = recognizer.translationinview(self) if let view = recognizer.view { view.center = cgpoint(x:view.center.x + translation.x, y:view.center.y + translation.y) } recognizer.settranslation(cgpointzero, inview: self) if recognizer.state == uigesturerecognizerstate.ended { //center view self.center.x = self.bounds.width/2 } } save position in class
class viewcontroller @iboutlet var reordersectionone: movesection! let positiondefaults = nsuserdefaults() positiondefaults.setobject(nsstringfromcgpoint(self.reordersectionone.yposition), forkey: "pointpositionsectionone") positiondefaults.synchronize() error: not have member named yposition
you need move declaration of yposition inside init(coder:) inside uiview subclass. also, yposition cgfloat, not cgpoint. used different instance variable, called savedcenter, save position actual cgpoint. i've refactored code , implemented changes below.
class moveableview: uiview { var savedyposition: cgfloat! required init?(coder adecoder: nscoder) { super.init(coder: adecoder) let panrecognizer = uipangesturerecognizer(target: self, action:"reposition:") self.addgesturerecognizer(panrecognizer) self.savedyposition = cgrectgetminy(self.frame) } func reposition(recognizer: uipangesturerecognizer) { let translation = recognizer.translationinview(self) if let view = recognizer.view { view.center = cgpointmake(view.center.x + translation.x, view.center.y + translation.y) } recognizer.settranslation(cgpointzero, inview: self) if recognizer.state == .ended { // center view self.center.x = cgrectgetwidth(self.bounds) / 2.0 } } } and put following in viewcontroller class
func saveposition() { let defaults = nsuserdefaults() defaults.setfloat(float(self.reordersectionone.savedyposition), forkey: "ypositionsectionone") defaults.synchronize() } note assumed uiview subclass named moveableview.
Comments
Post a Comment