我尝试保存通过UIView
移动的pan gesture recogniser
子类的位置,并且需要保持在该位置
UIView子类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
}
}
保存课程中的位置
class ViewController
@IBOutlet var reorderSectionOne: MoveSection!
let positionDefaults = NSUserDefaults()
positionDefaults.setObject(NSStringFromCGPoint(self.reorderSectionOne.yPosition), forKey: "pointPositionSectionOne")
positionDefaults.synchronize()
错误:没有名为yPosition的成员
答案 0 :(得分:1)
您需要将yPosition
的声明从init(coder:)
内移到UIView
子类内部。此外,yPosition
是CGFloat
,而不是CGPoint
。所以我使用了一个名为savedCenter
的不同实例变量来将位置保存为实际的CGPoint
。我重构了您的代码并实现了以下更改。
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
}
}
}
然后你会在你的ViewController
班级
func savePosition() {
let defaults = NSUserDefaults()
defaults.setFloat(Float(self.reorderSectionOne.savedYPosition), forKey: "yPositionSectionOne")
defaults.synchronize()
}
请注意,我假设您的UIView
子类名为MoveableView
。