gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 01:51:14 24 4
gpt4 key购买 nike

我正在尝试保存通过平移手势识别器移动的UIView子类的位置,并且需要保持在该位置

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 的成员

最佳答案

您需要将 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

关于ios - 保存 UIViewSubclass 的 Y 位置没有成员命名错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31389205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com