2015-07-09 4 views
1

У меня есть представление в контроллере навигации.UICollisionBehavior граница не работает

Затем я добавляю подзаголовок к этому виду и компенсирую его высоту начала, чтобы он покрывал только половину экрана (другая половина переполняла нижнюю часть экрана). Я хочу, чтобы иметь возможность затем перетащить этот вид вверх, но он останавливается, когда он попадает в нижнюю часть панели навигации.

Я использую UIPanGestureRecognizer для обработки перетаскивания вида, и это работает нормально, но оно просто не остановится на границе.

Это код, я использую:

bottomNavbarY = UIApplication.sharedApplication().statusBarFrame.size.height + self.navigationController!.navigationBar.frame.size.height 

view.addSubview(pullover.view) 
pullover.view.frame.origin.y = pulloverOffset 

var animator = UIDynamicAnimator(referenceView: view) 
var collision = UICollisionBehavior(items: [pullover.view]) 
collision.translatesReferenceBoundsIntoBoundary = true 
collision.addBoundaryWithIdentifier("upper", fromPoint: CGPointMake(0, bottomNavbarY), toPoint: CGPointMake(UIScreen.mainScreen().bounds.size.width, bottomNavbarY)) 
animator.addBehavior(collision) 

Однако, когда я перетащить вид сокрытия он никогда не взаимодействует с какой-либо границей, он просто проходит прямо через. Что я делаю не так? Можно ли использовать границы, чтобы остановить просмотры, которые пользователь перетаскивает таким образом?

ответ

3

, когда я перетащить вид сокрытия он никогда не взаимодействует с какими-либо границами

Вы неправильно поняли эту особенность. Границы столкновений - это когда UIKit Dynamics отвечает за перемещение просмотров. Перетаскивание - это когда пользователь отвечает за перемещение просмотров. Если вы хотите, чтобы перетаскивание останавливалось в определенном месте, вам нужно в обработчике распознавателя жестов думать о том, где находится представление, а не перемещать представление, если вы не хотите, чтобы он перемещался.

+0

Черт. Думал, что это может быть так. Я попытался сделать это в обработчике распознавателя жестов раньше, но у него были проблемы с остановкой его от прохождения точки, если ее тянут очень быстро. Вы знаете способ преодолеть это? – myles

+0

Я не знаю, что значит «преодолеть это». Если у вас возник вопрос о том, как сделать объект, перетаскиваемый с помощью распознавателя распознавания жеста, перед тем, как передать некоторую мнимую границу, спросите это как новый вопрос. Я знаю, как это сделать! Но я верю, что ответил на ваш вопрос. – matt

+0

Lol, похоже, вы точно знаете, что я имел в виду, «преодолевая это» ... Спасибо за помощь в любом случае. – myles

Смежные вопросы