2016-11-30 3 views
-1

Я довольно новичок в использовании XCode и Swift, поэтому я хочу знать, как перемещать UILabel. Вот мой код:Как переместить UILabel с помощью других UIButton?

@IBAction func startButton(_ sender: UIButton) { 
    sender.isHidden = true 
    drawtarget() 
} 

var hosPos = Int(arc4random_uniform(253)) + 10 
var verPos = 580 

func drawtarget() { 
    let button = UIButton(frame: CGRect(x: hosPos, y: verPos, width: 47, height: 47)) 
    button.backgroundColor = UIColor(red: 102/255, green: 205/255, blue: 255/255, alpha: 1.0) 
    button.layer.cornerRadius = 0.5 * button.bounds.size.width 
    button.addTarget(self, action: #selector(foo(sender:)), for: .touchUpInside) 
    view.addSubview(button) 
} 

func creatingShot(_ sender: UILabel) { 
    let shot = UILabel(frame: CGRect(x: 217, y: 50, width: 8, height: 8)) 
    shot.backgroundColor = UIColor.green 
    shot.text = "" 
    view.addSubview(shot) 
} 

func foo(sender: UIButton) { 
    sender.isHidden = true 
    perform(#selector(drawtarget), with: nil, afterDelay: 3.0) 
    hosPos = Int(arc4random_uniform(253)) + 10 
    verPos = 600 
} 

Итак, мне нужно переместить выстрел (UILabel) в центр кнопки (UIButton, что нажата). Есть идеи?

ответ

0

Использование AutoLayout, просто установите их centerAnchors равными друг другу:

@IBOutlet weak var myLabel:UILabel! 
@IBOutlet weak var myButton:UIButton! 
@IBAction func moveLabelToMe(sender: UIButton) { 
    myLabel.centerXAnchor.constraint(equalTo: myButton.centerXAnchor).isActive = true 
    myLabel.centerYAnchor.constraint(equalTo: myButton.centerYAnchor).isActive = true 
    UIView.animate(withDuration: 0.3) { self.view.layoutIfNeeded() } 
} 

Примечания:

  • Последняя строка кода помогает дать некоторую анимацию к вещам.
  • Долгосрочные, если вам не нужно использовать фреймы и CGRects, оба учатся, а затем, если возможно, придерживаются AutoLayout (как в IB, так и в коде). Это может быть сложным для изучения, но это делает вещи намного более независимыми от устройства.
  • При использовании AutoLayout в коде не забудьте всегда устанавливать свои представления, чтобы установить их , переводитAutoresizingMaskIntoConstraints в false. Это одна из самых распространенных ошибок, которые делают все (включая меня).
  • Если вы используете IB для AutoLayout, вы можете настроить IBOutlets для ограничений так же, как вы можете просматривать.
  • Существует несколько способов ограничения кода. Один из них выше (с использованием есть * Active), но еще один - настроить массивы ограничений, которые могут быть активированы и дезактивированы как пакет.
0

Попробуйте это ...

Определение как метки и кнопки в качестве глобального экземпляра.

UIView.animateWithDuration(1.0, 
    delay: 0.0, 
    options: .CurveEaseInOut, 
    animations: { 
     shot.center = button.center 
    }, 
    completion: { finished in 

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