HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 将滚动按钮添加到滚动视图大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在scrollview中滚动五个按钮.当用户停止拖动按钮时,应该移动到下一个按钮.我在这里做错了什么?
class ViewController: UIViewController {

    @IBOutlet weak var categoryScrollView: UIScrollView!
    var categoryArr = ["Jack","Mark","Down","Bill","Steve"]

    override func viewDidLoad() {
        super.viewDidLoad()
        let scrollingView = colorButtonsView(CGSizeMake(150,categoryScrollView.frame.size.height),buttonCount: 5)
        categoryScrollView.contentSize = scrollingView.frame.size
        categoryScrollView.addSubview(scrollingView)
        categoryScrollView.showsVerticalScrollInDicator = false
        categoryScrollView.delegate = self
        categoryScrollView.pagingEnabled = true
        categoryScrollView.inDicatorStyle = .Default
    }


func colorButtonsView(buttonSize:CGSize,buttonCount:int) -> UIView {
        let buttonView = UIView()
        buttonView.frame.origin = CGPointMake(0,0)
        let padding = CGSizeMake(10,10)
        buttonView.frame.size.width = (buttonSize.width + padding.width) * CGFloat(buttonCount)
        var buttonPosition = CGPointMake(padding.width * 0.5,padding.height)
        let buttonIncrement = buttonSize.width + padding.width
        for i in 0...(buttonCount - 1)  {
            var button = UIButton.buttonWithType(.Custom) as! UIButton
            button.frame.size = buttonSize
            button.frame.origin = buttonPosition
            buttonPosition.x = buttonPosition.x + buttonIncrement
            button.settitle(categoryArr[i],forState: UIControlState.Normal)
            buttonView.addSubview(button)
        }
        return buttonView
    }
}
extension ViewController:UIScrollViewDelegate{
    func scrollViewDidEndDecelerating(scrollView: UIScrollView) {

        let index = round(scrollView.contentOffset.x / scrollView.frame.size.width)
        print(indeX)
    }
}

滚动浏览很好..但只有两次.它不滚动到下一个按钮.我该怎么办

解决方法

func setContentOffset(scrollView: UIScrollView) {

    let numOfItems = itemCount  // 5
    let stopOver = scrollView.contentSize.width / CGFloat(numOfItems)
    let x = round(scrollView.contentOffset.x / stopOver) * stopOver

    guard x >= 0 && x <= scrollView.contentSize.width - scrollView.frame.width else {
        return
    }

    scrollView.setContentOffset(CGPointMake(x,scrollView.contentOffset.y),animated: truE)
}
extension ViewController: UIScrollViewDelegate {

    func scrollViewWillBeginDecelerating(scrollView: UIScrollView) {

        setContentOffset(scrollView)
    }

    func scrollViewDidEndDragging(scrollView: UIScrollView,willDecelerate decelerate: Bool) {

        guard !decelerate else {
            return
        }

        setContentOffset(scrollView)
    }
}

还在Github https://github.com/rishi420/ScrollViewCustomPaging做了一个演示项目

更新:

尝试在用户endDragging时虑滚动速度.

var veLocityX = CGFloat(0.0)

.

func setContentOffset(scrollView: UIScrollView) {

    let numOfItems = itemCount
    let stopOver = scrollView.contentSize.width / CGFloat(numOfItems)
    var x = round((scrollView.contentOffset.x + (veLocityX * 150)) / stopOver) * stopOver // 150 is for test. Change it for your liking

    x = max(0,min(x,scrollView.contentSize.width - scrollView.frame.width))

    scrollView.setContentOffset(CGPointMake(x,animated: truE)
}

.

func scrollViewWillEndDragging(scrollView: UIScrollView,withVeLocity veLocity: CGPoint,targetContentOffset: UnsafeMutablePointer<CGPoint>)
{
    veLocityX = veLocity.x
}

大佬总结

以上是大佬教程为你收集整理的ios – 将滚动按钮添加到滚动视图全部内容,希望文章能够帮你解决ios – 将滚动按钮添加到滚动视图所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。