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

Saving Y position of UIViewSubclass Does not Have member Named Error

我正在尝试保存 UIView subclass 的位置,它通过 pan gesture recogniser 移动并且需要留在那个位置

UIView 子classMoveSection

 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

class ViewController

@IBOutlet var reorderSectionOne: MoveSection!

let positionDefaults = NSUserDefaults()
positionDefaults.setObject(NSStringFromCGPoint(self.reorderSectionOne.yPosition), forKey: "pointPositionSectionOne")
positionDefaults.synchronize()

错误:没有名为 yPosition 的成员

您需要将 yPosition 的声明从 init(coder:) 内部移动到 UIView subclass 内部。此外,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 class

func savePosition() {
    let defaults = NSUserDefaults()
    defaults.setFloat(Float(self.reorderSectionOne.savedYPosition), forKey: "yPositionSectionOne")
    defaults.synchronize()
}

请注意,我假设您的 UIView subclass 被命名为 MoveableView