Я не уверен, что это ответ на ваш запрос, но небольшой код с добавлением простого UISwipeGestureRecognizer
к вашему MasterViewController's
представлению.
Если вы используете iOS 8.0 или более позднюю версию, вы можете использовать minimumPrimaryColumnWidth
и maximumPrimaryColumnWidth
, вместе с preferredPrimaryColumnWidthFraction
.
Я добавил левый и правый распознаватель жестов смахивания к представлению MasterViewController.
@IBAction func swipeGesture(_ sender: UISwipeGestureRecognizer) {
if sender.direction == .left {
UIView.animate(withDuration: 0.4) {
self.splitViewController?.minimumPrimaryColumnWidth = 200.0
self.splitViewController?.preferredPrimaryColumnWidthFraction = 0.0
self.splitViewController?.maximumPrimaryColumnWidth = 320.0
}
} else if sender.direction == .right {
UIView.animate(withDuration: 0.4) {
self.splitViewController?.minimumPrimaryColumnWidth = 200.0
self.splitViewController?.preferredPrimaryColumnWidthFraction = 1.0
self.splitViewController?.maximumPrimaryColumnWidth = 320.0
}
}
}
Вы также можете попробовать использовать Pan Gesture,как указано ниже, чтобы получить точный контроль над движениями касания.
let maximumPossibleWidth:CGFloat = 320.0
var beganPoint:CGFloat = 320.0
@IBAction func panGesture(_ sender: UIPanGestureRecognizer){
if sender.state == .began {
//Began
beganPoint = sender.location(in: sender.view).x
return
}
if sender.state == .changed {
let currentPoint = sender.location(in: sender.view).x
let fraction = currentPoint / maximumPossibleWidth
if beganPoint > currentPoint {
//left
self.splitViewController?.minimumPrimaryColumnWidth = 100.0
self.splitViewController?.preferredPrimaryColumnWidthFraction = fraction
self.splitViewController?.maximumPrimaryColumnWidth = 320.0
}else {
//right
self.splitViewController?.minimumPrimaryColumnWidth = 100.0
self.splitViewController?.preferredPrimaryColumnWidthFraction = fraction
self.splitViewController?.maximumPrimaryColumnWidth = 320.0
}
}
}