2015-03-15 4 views
0
@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 
    } 
} 

Когда код получает жест панорамы, поле будет перемещаться соответствующим образом, но в поле viewDidLoad() не будет перемещаться в указанное место. В IB он установлен в верхний левый угол, и последнее место будет меняться, поэтому я не могу просто переместить поле в IB. Как я могу сделать так, чтобы окно viewDidLoad перемещалось в правильное положение?UIView не будет корректно перемещаться по ViewDidLoad

ответ

2

Проблема заключается в том, что ваши подвиды выкладываются из послеviewDidLoad, так что если вы установите позицию вашего И.Б. подвида в viewDidLoad он затем будет приложен к его раме в раскадровке до появления вида. Поэтому я бы рекомендовал переместить код в ваш viewDidLoad к viewDidLayoutSubviews затем добавить dispatch_once блок или условное, чтобы гарантировать, что код выполняется только в первый раз viewDidLayoutSubviews называется, например:

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 
    } 
} 
+0

Это было идеально! Спасибо огромное! Я работаю над этим все выходные безрезультатно. –

Смежные вопросы