If statement 如果语句重置对象的位置。。。为什么?
添加此if语句时:If statement 如果语句重置对象的位置。。。为什么?,if-statement,swift,xcode6,If Statement,Swift,Xcode6,添加此if语句时: if sender.state == UIGestureRecognizerState.Ended { stateLabel.text = "Coordniates: \(sender.view!.center.x), \(sender.view!.center.y)" } 我的“panView”的位置重置为其原始位置(当应用程序启动时开始)。如果我删除If语句,一切都会正常工作(“panView”框停留在我放置它的位置。坐标在“stateL
if sender.state == UIGestureRecognizerState.Ended {
stateLabel.text = "Coordniates: \(sender.view!.center.x), \(sender.view!.center.y)"
}
我的“panView”的位置重置为其原始位置(当应用程序启动时开始)。如果我删除If语句,一切都会正常工作(“panView”框停留在我放置它的位置。坐标在“stateLabel”中始终正确更新
我通过包含if语句来重置位置:-o
有什么想法吗
以下是我的完整代码:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var panView: UIView!
@IBOutlet weak var stateLabel: UILabel!
let panRec = UIPanGestureRecognizer()
override func viewDidLoad() {
super.viewDidLoad()
panRec.addTarget(self, action: "draggedView:")
panView.addGestureRecognizer(panRec)
// Do any additional setup after loading the view, typically from a nib.
}
func draggedView(sender:UIPanGestureRecognizer){
self.view.bringSubviewToFront(sender.view!)
var translation = sender.translationInView(self.view)
sender.view!.center = CGPointMake(sender.view!.center.x + translation.x, sender.view!.center.y + translation.y)
sender.setTranslation(CGPointZero, inView: self.view)
if sender.state == UIGestureRecognizerState.Ended {
stateLabel.text = "Coordniates: \(sender.view!.center.x), \(sender.view!.center.y)"
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
自动布局正在移动您的视图。您有两种选择来处理此问题:
IBOutlet
s添加到代码中的约束中,然后更新约束的常量
属性,而不是引用框架。下面是更新后的代码以使用约束
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var panView: UIView!
@IBOutlet weak var stateLabel: UILabel!
@IBOutlet weak var panViewCenterX: NSLayoutConstraint!
@IBOutlet weak var panViewCenterY: NSLayoutConstraint!
let panRec = UIPanGestureRecognizer()
override func viewDidLoad() {
super.viewDidLoad()
panRec.addTarget(self, action: "draggedView:")
panView.addGestureRecognizer(panRec)
// Do any additional setup after loading the view, typically from a nib.
}
func draggedView(sender:UIPanGestureRecognizer){
self.view.bringSubviewToFront(sender.view!)
var translation = sender.translationInView(self.view)
panViewCenterY.constant += translation.y
panViewCenterX.constant += translation.x
sender.setTranslation(CGPointZero, inView: self.view)
if sender.state == UIGestureRecognizerState.Ended {
stateLabel.text = "Coordniates: \(panViewCenterX.constant), \(panViewCenterY.constant)"
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
现在,我将逐步介绍如何在Interface Builder中创建约束。不要让细节吓到你,这并不难
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var panView: UIView!
@IBOutlet weak var stateLabel: UILabel!
@IBOutlet weak var panViewCenterX: NSLayoutConstraint!
@IBOutlet weak var panViewCenterY: NSLayoutConstraint!
let panRec = UIPanGestureRecognizer()
override func viewDidLoad() {
super.viewDidLoad()
panRec.addTarget(self, action: "draggedView:")
panView.addGestureRecognizer(panRec)
// Do any additional setup after loading the view, typically from a nib.
}
func draggedView(sender:UIPanGestureRecognizer){
self.view.bringSubviewToFront(sender.view!)
var translation = sender.translationInView(self.view)
panViewCenterY.constant += translation.y
panViewCenterX.constant += translation.x
sender.setTranslation(CGPointZero, inView: self.view)
if sender.state == UIGestureRecognizerState.Ended {
stateLabel.text = "Coordniates: \(panViewCenterX.constant), \(panViewCenterY.constant)"
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
1.这很有效,但我真的希望自动布局,因为我希望它能在多台设备上运行。2.我不知道这是怎么做到的。如果我更改了除文本道具以外的任何内容,如
statelab.backgroundColor
,则一切正常(启用自动布局时)完全按照您显示和复制的代码执行,但在panView.AddgestureRecognitizer(panRec)中不断出现此错误:“Thread1:EXC_BAD_指令(code=EXCI386_INVOP,subcode=0x0)。在调试区域中,它会显示:“致命错误:在展开可选值(lldb)时意外发现零。”“…我在这里遗漏了什么?发现了错误;我忘了连接panView:-o现在一切都正常了!!!Thanx还有一件事:如果我想让多个panView
独立移动,那怎么容易呢?看起来stackoverflow想让我对此进行新的讨论,所以我会这样做;-)