Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIView-won';加载时不能正确移动_Ios_Swift_Uiview - Fatal编程技术网

Ios UIView-won';加载时不能正确移动

Ios UIView-won';加载时不能正确移动,ios,swift,uiview,Ios,Swift,Uiview,每当代码收到平移手势时,框都会适当移动,但在viewDidLoad()上,框不会重新定位到给定位置。在IB中,它被设置在左上角,最后一个位置将发生变化,因此我不能简单地在IB中移动框。我如何使它在viewDidLoad上移动到正确的位置?问题是子视图的布局在viewDidLoad之后,因此,如果在viewDidLoad中设置IB子视图的位置,则在视图出现之前,它将被重新定位到故事板中的框架中。因此,我建议将viewdiload中的代码移动到viewdilayoutsubviews中,然后添加一个

每当代码收到平移手势时,框都会适当移动,但在viewDidLoad()上,框不会重新定位到给定位置。在IB中,它被设置在左上角,最后一个位置将发生变化,因此我不能简单地在IB中移动框。我如何使它在viewDidLoad上移动到正确的位置?

问题是子视图的布局在
viewDidLoad
之后,因此,如果在
viewDidLoad
中设置IB子视图的位置,则在视图出现之前,它将被重新定位到故事板中的框架中。因此,我建议将
viewdiload
中的代码移动到
viewdilayoutsubviews
中,然后添加一个dispatch\u once块或一个条件,以确保代码仅在第一次调用
viewdilayoutsubviews
时运行,例如:

@IBOutlet var box: UIView!
var lastLocation:CGPoint = CGPointMake(200,400) //arbitrary value that will change

override func viewDidLoad() {
    super.viewDidLoad()

    box.center = lastLocation

    lastLocation = box.center
}


@IBAction func detectPan(sender: UIPanGestureRecognizer) {
    var translation  = sender.translationInView(self.view!)

    box.center = CGPointMake(lastLocation.x + translation.x, lastLocation.y + translation.y)



    println(box.center)

    if(sender.state == UIGestureRecognizerState.Ended)

    {

        lastLocation = box.center
    }
}


太完美了!非常感谢你!我整个周末都在做这件事,但毫无结果。
override func viewDidLayoutSubviews() {
    func doOnce() {
        struct Token {
            static var token: dispatch_once_t = 0;
        }
        dispatch_once(&Token.token) {
            self.box.center = lastLocation
            self.lastLocation = box.center
        }
    }
    doOnce()
}
var subviewsLaidout = false
override func viewDidLayoutSubviews() {
    if subviewsLaidout == false {
        subviewsLaidout = true
        box.center = lastLocation
        lastLocation = box.center
    }
}