UIPanGestureRecognizer не работает

Странно, но когда я добавляю UIPanGestureRecognizer в представление, это не работает. Это мое мнение, что белое представление является подвидом красного представления:

введите здесь описание изображения

Основной вид:

@IBOutlet weak var redView: UIView!
@IBOutlet weak var whiteView: UIView!
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    let panRecognizer = UIPanGestureRecognizer(target:self, action:#selector(ViewController.handlePan))
    whiteView.gestureRecognizers = [panRecognizer]        
}


func handlePan(recognizer:UIPanGestureRecognizer)  {
    //foo
}

Когда я нажимаю и перетаскиваю белый вид, он не перемещается.


person Maysam    schedule 16.04.2016    source источник
comment
Это PangestureRecognizer, а не TapgestureRecognizer???   -  person appiconhero.co    schedule 16.04.2016
comment
Какой вопрос? Вы назначили распознаватель жестов белому представлению.   -  person t0mm13b    schedule 16.04.2016
comment
@ t0mm13b, я не могу переместить белый вид, это проблема.   -  person Maysam    schedule 16.04.2016
comment
Моя проблема заключалась в том, что я создал UIGestureRecognizer вместо UIPanGestureRecognizer   -  person Daniel Springer    schedule 26.11.2018


Ответы (4)


попробуй это:

whiteView.userInteractionEnabled=true
person michael wang    schedule 16.04.2016

Из документов Apple:

Если код вашего распознавателя жестов панорамирования не вызывается, проверьте, выполняются ли следующие условия, и при необходимости внесите исправления:

Для свойства isUserInteractionEnabled представления установлено значение true. Представления изображений и метки устанавливают для этого свойства значение false по умолчанию.

Количество касаний находится между значениями, указанными в свойствах minimumNumberOfTouches и maximumNumberOfTouches.

Для объекта UIScreenEdgePanGestureRecognizer свойство Edges настраивается и касания начинаются с соответствующего края.

Обработка жестов панорамирования

person Vitya Shurapov    schedule 10.10.2019

Вот ответ:

class ViewController: UIViewController {

    @IBOutlet weak var redView: UIView!
    @IBOutlet weak var whiteView: UIView!

    var lastLocation:CGPoint = CGPointMake(0, 0)


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let panRecognizer = UIPanGestureRecognizer(target:self, action:#selector(ViewController.handlePan))
        whiteView.addGestureRecognizer(panRecognizer)

    }


    func handlePan(recognizer:UIPanGestureRecognizer)  {
        let translation  = recognizer.translationInView(redView)
        whiteView.center = CGPointMake(lastLocation.x + translation.x, lastLocation.y + translation.y)
    }

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        // Promote the touched view
        lastLocation = whiteView.center

    }
}
person Maysam    schedule 16.04.2016

Если вы используете быстрый язык для метода, вы не можете использовать [].

var PanGesture = UIPanGestureRecognizer(target: self, action: "respondToPanGesture:")
whiteView.addGestureRecognizer(PanGesture)

Надеюсь, поможет.

person vikarn barai    schedule 16.04.2016
comment
это не проблема - person Maysam; 16.04.2016