如何通过点击其他 UIButton 来移动 UILabel?

Posted

技术标签:

【中文标题】如何通过点击其他 UIButton 来移动 UILabel?【英文标题】:How to move UILabel via taping other UIButton? 【发布时间】:2016-11-30 18:29:41 【问题描述】:

我对使用 XCode 和 Swift 很陌生,所以我想知道如何移动 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,被按下)的中心。有什么想法吗?

【问题讨论】:

【参考方案1】:

使用 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 时,请记住始终将视图设置为将其 translatesAutoresizingMaskIntoConstraints 设置为 false。这是每个人(包括我)最常犯的错误之一。 如果您将 IB 用于 AutoLayout,则可以像查看视图一样为约束设置 IBOutlets。 有几种方法可以对约束进行编码。一个是上面的(使用is*Active),另一个是设置可以作为批处理激活和停用的约束数组。

【讨论】:

【参考方案2】:

试试这个...

将标签和按钮都定义为全局实例。

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

    )

【讨论】:

以上是关于如何通过点击其他 UIButton 来移动 UILabel?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过子类化 UIButton 来获取按钮的背景图像名称?

通过点击它来改变 UIView/UIControl 的屏幕位置

Swift:UIButton 不可点击的重叠视图

如何从数组中过滤多个选定值并将其从 uibutton 加载到其他 uitableview

动画移动 UIButton 在移动时不响应触摸/点击

如何使 UIButton 与 UIScrollView 一起移动