2016-11-30 2 views
-1

私はXCodeとSwiftの使い方がとても新しいので、私はUILabelの移動方法を知りたいと思っています。ここに私のコードです:他のUIButtonをテーピングしてUILabelを移動するには?

@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

、ちょうど互いに等しい自分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() } 
} 

注:

  • コードの最後の行は、物事にいくつかのアニメーションを与えるのに役立ちます。
  • フレームとCGRectを絶対に使用する必要がない限り、可能な限りAutoLayoutを学習してから固執してください(IBとコードの両方で)。それは学ぶのは難しいかもしれませんが、より多くのデバイスに依存しないようにしています。
  • コードでAutoLayoutを使用する場合、必ずAutoresizingMaskIntoConstraintsをfalseに設定するようにビューを設定してください。これは誰もが私を含めて最もよくある間違いの一つです。
  • IBをAutoLayoutに使用している場合は、表示できるようにIBOutletsに制約を設定できます。
  • 制約をコード化する方法はいくつかあります。 1つは上です(は* Activeです)。もう1つは、バッチとしてアクティブ化および非アクティブ化できる制約の配列を設定することです。
0

がグローバルインスタンスとしてラベルとボタンの両方を定義...これを試してみてください。

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

    }) 
関連する問題