UIPageView Жесты поворота страницы были отключены при использовании внутри UIScrollView - PullRequest
0 голосов
/ 02 марта 2020

Мне нужно добавить UIPageViewController внутри UIScrollView.

Моя иерархия представлений UIVIewController (UIView)> UIScrollVIew> UIVIew (ContentView)

И внутри этого я программно добавил свой UIPageViewController.

UIPageViewController загружен идеально, как и ожидалось. Scrollview также прокручивает. Но его жесты страницы были отключены, я думаю, scrollview.

В основном мне нужен UIPageView внутри scrollview. Я хочу, чтобы вид прокрутки прокручивался только по вертикали. А горизонтальные пролистывания должны работать только для контроллера uipageview при смене страницы. В основном, как приложение для чтения книг в ландшафтном режиме. Я также использую этот экран для работы только в альбомной ориентации.

Вот мой код

class QuranLandController: UIViewController {

    @IBOutlet weak var quranContainer: UIView!
    @IBOutlet weak var scrollView: UIScrollView!
    // UIPageViewController
    let controller = QuranPagerController()

    let imgWidth = 2048.0
    let imgHeight = 2732.0

    override func viewDidLoad() {
        super.viewDidLoad()
        let h = CGFloat((imgHeight/imgWidth) * Double(self.view.frame.width))
//        quranContainer.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: h)


        addChildViewController(controller)
        controller.view.translatesAutoresizingMaskIntoConstraints = false

        controller.didMove(toParentViewController: self)

        //        Translator().defaultTranslation()
        for recognizer in controller.gestureRecognizers {
            if recognizer is UITapGestureRecognizer {
                recognizer.isEnabled = false
            }
        }

        scrollView.canCancelContentTouches = false
        scrollView.delaysContentTouches = false
        scrollView.isUserInteractionEnabled = true
        scrollView.isExclusiveTouch = true
        scrollView.isDirectionalLockEnabled = true

//        scrollView.isScrollEnabled = false


    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        let h = CGFloat((imgHeight/imgWidth) * Double(self.view.frame.width))
        quranContainer.layout(controller.view)
        .width().top().left().right().height(h)
        scrollView.contentSize = CGSize(width: self.view.frame.width, height: h)
    }

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        return .landscapeRight
    }

    override var shouldAutorotate: Bool {
        return true
    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
    }

    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destination.
        // Pass the selected object to the new view controller.
    }
    */

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