Невозможно выполнить панорамирование меньшего UIView вне своего суперпредставления - PullRequest
0 голосов
/ 22 сентября 2019

У меня есть UIView, который содержит много UIView подпредставлений.Когда пользователь пытается панорамировать жест одного из подпредставлений, я хочу, чтобы он мог перетащить его в любое место на экране.

Однако я могу перетащить только эти меньшие виды в пределах большего UIView, в котором они содержатся. Когда пользователь впервые пытается выполнить панорамирование жестом меньшего вида, есть ли способ программно создать второй UIView сверхуа затем перетащите второй UIView вместо?Второй UIView будет совершенно новым с меньшего вида, который был впервые затронут.

Это функция обработчика, которую я пока имею, только для справки.Хотя я не знаю, где бы программно создать второй UIView.Любая помощь будет принята с благодарностью:

 @objc func handlePanGesture(sender: UIPanGestureRecognizer) {
    // get translation
    var translation = sender.translation(in: view)
    sender.setTranslation(CGPoint.zero, in: view)

    // drag around current UIView
    var newView = sender.view as! UIView
    newView.center = CGPoint(x: newView.center.x+translation.x, y: newView.center.y+translation.y)
    newView.isMultipleTouchEnabled = true
    newView.isUserInteractionEnabled = true

    if sender.state == UIGestureRecognizer.State.began {
        // add something you want to happen when the Label Panning has started
    }

    if sender.state == UIGestureRecognizer.State.ended {
        // add something you want to happen when the Label Panning has ended
    }

    if sender.state == UIGestureRecognizer.State.changed {
        // add something you want to happen when the Label Panning has been change ( during the moving/panning )
    } else {
        // or something when it's not moving
    }
}

What I'm trying to do in my app

Ответы [ 2 ]

0 голосов
/ 22 сентября 2019

Очень распространенный шаблон, позволяющий перетаскивать представления за пределы их суперпредставления, - это создание моментального снимка или клона исходного представления, как только начинается жест, вы, конечно, можете скрыть исходный вид, чтобы пользователь чувствовал себя кактот же элемент интерфейса перетаскивается.Это шаблон, используемый Apple в своем примере кода перетаскивания здесь

https://developer.apple.com/documentation/uikit/drag_and_drop/adopting_drag_and_drop_in_a_custom_view

Посмотрите на строку 36 в ViewController + Drag.swift для соответствующего кода.

0 голосов
/ 22 сентября 2019

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

Из-за способа, которым работает сенсорный ввод, по умолчанию это невозможно дляпредставление, которого нужно коснуться, когда оно достигает границ своего суперпредставления.Но вы можете преодолеть это ограничение, переопределив hitTest в суперпредставлении.

...