在scrollView中滑动屏幕时,iOS无法禁用水平滚动?

时间:2018-03-16 14:15:29

标签: ios swift

在我的应用程序中,我必须实现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)

}

1 个答案:

答案 0 :(得分:0)

从我对评论的理解是你想要停止水平滚动。这实际上非常简单。

您可以在ScrollViewDelegate方法中停止水平滚动或垂直滚动​​。这是怎么回事,

contentOffset.x值设置为zero会阻止滚动视图在水平方向滚动。

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    sender.contentOffset.x = 0.0
}