保存UIViewSubclass的Y位置没有成员命名错误

时间:2015-07-13 16:59:30

标签: ios swift uiview position

我尝试保存通过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的成员

1 个答案:

答案 0 :(得分:1)

您需要将yPosition的声明从init(coder:)内移到UIView子类内部。此外,yPositionCGFloat,而不是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