Draggable label - ios

У меня есть требование перемещать ярлык только тогда, когда пользователь касается его и перетаскивает. Я не могу узнать, касался ли пользователь этого ярлыка или нет. Я использовал метод touchesMoved (Swift 2). Ниже мой код

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
    super.touchesBegan(touches as Set<UITouch>, withEvent: event) 
    let touch = touches.first

  if (touch!.view) == (moveLabel as UIView) // moveButton is my label
  {
    location = touch!.locationInView(self.view)
    moveLabel.center = location
  }
}

Когда я делаю это, мой ярлык не движется :(, пожалуйста, помогите мне

 Nikolai Ruhe10 июн. 2016 г., 14:00
призваниеsuper.touchesBegan отtouchesMoved вероятно, плохая идея.

Ответы на вопрос(1)

Решение Вопроса

Я думал в вашем вопросе, и это мой результат, вы должны подклассUILabel и вinit вам нужно установитьuserInteractionEnabled = true а затем переопределить этот методoverride func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) хорошо, мой код такой:

Код Swift 3.1

import UIKit

class draggableLabel: UILabel {


    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.layer.borderWidth = 1
        self.layer.borderColor = UIColor.red.cgColor
        self.isUserInteractionEnabled = true
    }



    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
        let touch = touches.first;
        let location = touch?.location(in: self.superview);
        if(location != nil)
        {
        self.frame.origin = CGPoint(x: location!.x-self.frame.size.width/2, y: location!.y-self.frame.size.height/2);
        }
    }

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {

    }

}

Код Swift 2.2

import UIKit

class draggableLabel: UILabel {


    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.layer.borderWidth = 1
        self.layer.borderColor = UIColor.redColor().CGColor
        self.userInteractionEnabled = true
    }

    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
        let touch = touches.first;
        let location = touch?.locationInView(self.superview);
        if(location != nil)
        {
        self.frame.origin = CGPointMake(location!.x-self.frame.size.width/2, location!.y-self.frame.size.height/2);
        }
    }

    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {

    }

}

Надеюсь, это поможет вам, у меня отлично работает, вот как это работает

 vinoth15 июн. 2016 г., 12:51
Привет Рейнер, это сработало :) Но я не понимаю, как это работает :( Не могли бы вы объяснить мне код внутри штрихов перемещен func?

Ваш ответ на вопрос