плавный переход между двумя прокрутками - PullRequest
0 голосов
/ 05 октября 2018

Как вы можете видеть ниже, у меня есть ViewController (назовем его viewController A), который содержит контейнерное представление с ViewController внутри (давайте назовем этот ViewController B).

Итак, что происходит ниже, это когда вы прокручиваете вверх просмотр прокрутки ViewController A, пока вкладка не достигнет вершины.Как только представление вкладок достигнет вершины, представление прокрутки для ViewController B вступит во владение и начнет прокручивать представление контейнера.И когда вы прокручиваете обратно вниз, представление прокрутки viewController B продолжается до тех пор, пока верхняя часть не становится видимой, а затем прокручивается представление viewController A, чтобы вернуть представление заголовка вниз.

Проблема

Таким образом, функция прокрутки работает точнокак я хочу, однако, моя проблема в том, что когда scrollViews переключаются между собой, это не гладко.Пользователь должен поднять палец с экрана и опустить его обратно, пока не будет распознано правильное представление прокрутки.Как сделать так, чтобы пользователь проводил пальцем вверх или вниз по экрану прокрутки, плавно переключаясь между собой и не останавливаясь?Как автоматический переход.

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

enter image description here enter image description here enter image description here

ViewController A

import Foundation
import UIKit
import XLPagerTabStrip

class viewControllerA: ButtonBarPagerTabStripViewController {

      @IBOutlet weak var containerHeightConstraint: NSLayoutConstraint!
      @IBOutlet weak var scrollView: UIScrollView! 
      @IBOutlet weak var contentView: UIView!
      @IBOutlet weak var headerView: HeaderView!
      @IBOutlet weak var tabView: ButtonBarView!    
      @IBOutlet weak var viewContainer: UIScrollView!

        override func viewDidLoad() {

       self.scrollView.delegate = self

           NotificationCenter.default.addObserver(self, selector: #selector(EnableScroll), name: NSNotification.Name(rawValue: "enableScroll"), object: nil)

            containerView.isScrollEnabled = false
            self.containerView.bounces = false

            super.viewDidLoad()
        }

    @objc func EnableScroll() {
        self.scrollView.isScrollEnabled = true
    }

        override func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let yOffset = scrollView.contentOffset.y
        if scrollView == self.scrollView {
            if yOffset >= 250 {
                //tabView has reached the top
                //enable ViewController B's scrollViews
                 NotificationCenter.default.post(name: NSNotification.Name(rawValue: "EnableScroll"), object: nil)
            }
        }
    }
}

ViewController B

class viewControllerB: UIViewController, IndicatorInfoProvider, UIScrollViewDelegate {

    @IBOutlet weak var scrollView: UIScrollView!

     override func viewDidLoad() {
       super.viewDidLoad(

   self.scrollView.delegate = self

  NotificationCenter.default.addObserver(self, selector: #selector(EnableScroll), name: NSNotification.Name(rawValue: "EnableScroll"), object: nil)
        }

     @objc func EnableScroll() {        
        self.scrollView.isScrollEnabled = true       
            }

      Override func scrollViewDidScroll(_ scrollView: UIScrollView) {

        let yOffset = scrollView.contentOffset.y
        if scrollView == self.scrollView {
            if yOffset <= 0 {
                //scrolling down, top of ViewControllerB is full in view
                self.scrollView.isScrollEnabled = false
                //enables ViewController A's scrollview
                 NotificationCenter.default.post(name: NSNotification.Name(rawValue: "enableScroll"), object: nil)

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