UISplitViewController - изменяет размеры видов, перетаскивая разделительную линию - PullRequest
0 голосов
/ 29 сентября 2018

Я думал, что это была базовая функция UISplitViewController, позволяющая изменять размеры основных / подробных видов путем перетаскивания разделительной линии.Прочитав документацию, я обнаружил, что это невозможно в приложениях для iOS.Тем не менее, я нашел приложения на iOS, которые имеют SplitView с перетаскиваемым разделителем для изменения размера главного / подробного представления.

Кто-нибудь делал это?Если да, не могли бы вы помочь мне с некоторыми указателями.Заранее спасибо.

1 Ответ

0 голосов
/ 30 сентября 2018

Я не уверен, что это ответ на ваш запрос, но небольшой код с добавлением простого 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
        }

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...