用手势在swift中移动标签位置

时间:2017-03-16 00:08:40

标签: ios swift gesture

我的视图控制器中有一个标签。我每次点击标签时都试图将标签的位置向左移动50个点。这是我到目前为止所做的,但我的标签不会在模拟中移动。我对标签有限制。它大约100宽,高50,并且它也在视图控制器中居中。

    override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    let tapGesture = UITapGestureRecognizer(target: gestureLabel, action: #selector(moveLabel))
    gestureLabel.addGestureRecognizer(tapGesture)

}

func moveLabel(){
    if(left){
        moveLeft()
    }
    else{
        moveRight()
    }

}

func moveLeft(){
    let originalX = gestureLabel.frame.origin.x
    if(originalX < 0){
        bringIntoFrame()
    }
    else{
        gestureLabel.frame.offsetBy(dx: -50, dy: 0)
    }
}

5 个答案:

答案 0 :(得分:0)

UILabel userInteractionEnabled默认为false。尝试将其设置为true

答案 1 :(得分:0)

您应该更改标签的约束,而不是标签本身。

此外,您的target应该是self,而不是gestureLabel

另外,你可以动画那个。 :)

像这样:

class ViewController: UIViewController {

    // Centers the Meme horizontally.
    @IBOutlet weak var centerHorizontalConstraint: NSLayoutConstraint!

    // A custom UIView.
    @IBOutlet weak var okayMeme: OkayMeme!

    override func viewDidLoad() {
        super.viewDidLoad()
        addGestureRecognizer()
    }

    func addGestureRecognizer() {
        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(moveMeme))
        okayMeme.addGestureRecognizer(tapGesture)
    }

    func moveMeme() {
        UIView.animate(withDuration: 2.0) {
            self.centerHorizontalConstraint.constant -= 50
            self.view.layoutIfNeeded()
        }
    }
}

&#34;演示&#34;:

DEMO

答案 2 :(得分:0)

此处您可以将标签移动到您想要的地方

 override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
        if let touch = touches.first {
            let position = touch.location(in: self.view)
            print(position.x)
            print(position.y)
            lbl.frame.origin = CGPoint(x:position.x-60,y:position.y-50)
        }
    }

答案 3 :(得分:0)

标签不会移动,因为它有约束。最简单的方法是:

1)以编程方式创建标签(这样你就可以自由地移动它)

    var labelDinamic =  UILabel(frame: CGRectMake(0, 0,200, 200));
    labelDinamic.text = "test text";
    self.view.addSubview(labelDinamic);

2)设置标签初始位置(我建议使用当前标签中有约束的位置。另外,隐藏约束标签,因为你不需要它显示)

labelDinamic.frame.origin.x = yourLabelWithConstraints.frame.origin.x;
labelDinamic.frame.origin.y = yourLabelWithConstraints.frame.origin.y;

3)现在,您可以使用属性

移动标签
labelDinamic.frame.origin.x = 123
labelDinamic.frame.origin.y = 200

答案 4 :(得分:0)

您创建了一个新框架,但没有将其分配给标签。 offsetBy不会更改框架。它会创建一个新的。

替换

gestureLabel.frame.offsetBy(dx: -50, dy: 0)

gestureLabel.frame = gestureLabel.frame.offsetBy(dx: -50, dy: 0)

但是上面的方法假设你直接使用,而不是约束。标准方法是使用“超前视图”约束并更改其常量而不是更改框架。