আমি যে উত্তরগুলি পেয়েছি তা আমার কাছে খুব বিভ্রান্তিকর বা অসম্পূর্ণ বলে মনে হচ্ছে তাই এখানে একটি সম্পূর্ণ এবং কনফিগারযোগ্য সমাধান:
ধাপ 1:
আপনার প্রতিটি পিভিসি উপাদানকে বাম এবং ডান স্ক্রোলিং সক্ষম আছে কিনা তা জানানোর জন্য দায়িত্ব দিন।
protocol PageViewControllerElement: class {
var isLeftScrollEnabled: Bool { get }
var isRightScrollEnabled: Bool { get }
}
extension PageViewControllerElement {
// scroll is enabled in both directions by default
var isLeftScrollEnabled: Bool {
get {
return true
}
}
var isRightScrollEnabled: Bool {
get {
return true
}
}
}
আপনার প্রতিটি পিভিসি ভিউ কন্ট্রোলারের উপরের প্রোটোকলটি প্রয়োগ করা উচিত।
ধাপ ২:
আপনার পিভিসি নিয়ন্ত্রকদের মধ্যে, প্রয়োজন হলে স্ক্রোলটি অক্ষম করুন:
extension SomeViewController: PageViewControllerElement {
var isRightScrollEnabled: Bool {
get {
return false
}
}
}
class SomeViewController: UIViewController {
// ...
}
ধাপ 3:
আপনার পিভিসিতে কার্যকর স্ক্রোল লক পদ্ধতি যুক্ত করুন:
class PVC: UIPageViewController, UIPageViewDelegate {
private var isLeftScrollEnabled = true
private var isRightScrollEnabled = true
// ...
override func viewDidLoad() {
super.viewDidLoad()
// ...
self.delegate = self
self.scrollView?.delegate = self
}
}
extension PVC: UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
print("contentOffset = \(scrollView.contentOffset.x)")
if !self.isLeftScrollEnabled {
disableLeftScroll(scrollView)
}
if !self.isRightScrollEnabled {
disableRightScroll(scrollView)
}
}
private func disableLeftScroll(_ scrollView: UIScrollView) {
let screenWidth = UIScreen.main.bounds.width
if scrollView.contentOffset.x < screenWidth {
scrollView.setContentOffset(CGPoint(x: screenWidth, y: 0), animated: false)
}
}
private func disableRightScroll(_ scrollView: UIScrollView) {
let screenWidth = UIScreen.main.bounds.width
if scrollView.contentOffset.x > screenWidth {
scrollView.setContentOffset(CGPoint(x: screenWidth, y: 0), animated: false)
}
}
}
extension UIPageViewController {
var scrollView: UIScrollView? {
return view.subviews.filter { $0 is UIScrollView }.first as? UIScrollView
}
}
পদক্ষেপ 4:
নতুন স্ক্রিনে পৌঁছানোর সময় স্ক্রোল সম্পর্কিত বৈশিষ্ট্যগুলি আপডেট করুন (আপনি যদি কিছু স্ক্রিনে ম্যানুয়ালি রূপান্তর করেন তবে সক্ষমস্ক্রোল পদ্ধতিটি কল করতে ভুলবেন না):
func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
let pageContentViewController = pageViewController.viewControllers![0]
// ...
self.enableScroll(for: pageContentViewController)
}
private func enableScroll(for viewController: UIViewController) {
guard let viewController = viewController as? PageViewControllerElement else {
self.isLeftScrollEnabled = true
self.isRightScrollEnabled = true
return
}
self.isLeftScrollEnabled = viewController.isLeftScrollEnabled
self.isRightScrollEnabled = viewController.isRightScrollEnabled
if !self.isLeftScrollEnabled {
print("Left Scroll Disabled")
}
if !self.isRightScrollEnabled {
print("Right Scroll Disabled")
}
}
pageViewControllerObject.view.userInteractionEnabled = NO;