在我的应用程序中,我必须实现ScrollView和页面控件,我使用ScrollView进行垂直滚动和水平滚动。当我用滚动水平拖动屏幕意味着它工作正常,但当我用滚动拖动屏幕垂直意味着它有一些毛刺(如垂直和水平滚动)无法阻止或无法找到问题。
因此我决定在页面控制中放置两个名为next和previous的按钮用于下一页和上一页的水平滚动,所以我想在拖动屏幕时停止水平滚动,但我不知道如何停止水平滚动(不是垂直滚动)。
在这里,我发布了在页面控制中滚动以及下一个和上一个按钮操作的代码。
我已经声明并调用了ScrollView Delegate。
UIScrollViewDelegate
override func viewDidLoad() {
super.viewDidLoad()
configurePageControl()
scrollMainHolderView.delegate = self
scrollMainHolderView.isPagingEnabled = true
}
ScrollView方法是:
//MARK:- Scrollview delegate -
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width)
pageControlNew.currentPage = Int(pageNumber)
self.scrollMainHolderView.contentSize=CGSize(width: self.view.frame.size.width * CGFloat(templateMutArray.count), height: CGFloat((globalYarr[Int(pageNumber)] as? CGFloat)!))
}
设置页面控制的代码,
func configurePageControl() {
self.pageControlNew.numberOfPages = templateMutArray.count
self.pageControlNew.currentPage = 0
self.pageControlNew.tintColor = UIColor.red
self.pageControlNew.pageIndicatorTintColor = UIColor.black
self.pageControlNew.currentPageIndicatorTintColor = UIColor.green
}
下一个和上一个按钮操作的代码是,
@IBAction func pagePreviousBtnTapped(_ sender: Any) {
isHorizontalSCrolling = true
scrollMainHolderView.delegate = self
let scrollBounds = self.scrollMainHolderView.bounds
let contentOffset = CGFloat(floor(self.scrollMainHolderView.contentOffset.x - scrollBounds.size.width))
self.movScrollToFrame(contentOffset: contentOffset)
}
@IBAction func pageNextBtnTapped(_ sender: Any) {
isHorizontalSCrolling = true
scrollMainHolderView.delegate = self
let scrollBounds = self.scrollMainHolderView.bounds
let contentOffset = CGFloat(floor(self.scrollMainHolderView.contentOffset.x + scrollBounds.size.width))
self.movScrollToFrame(contentOffset: contentOffset)
}
答案 0 :(得分:0)
从我对评论的理解是你想要停止水平滚动。这实际上非常简单。
您可以在ScrollViewDelegate
方法中停止水平滚动或垂直滚动。这是怎么回事,
将contentOffset.x
值设置为zero
会阻止滚动视图在水平方向滚动。
func scrollViewDidScroll(_ scrollView: UIScrollView) {
sender.contentOffset.x = 0.0
}