嗨,我正在我的应用程序中使用PageController
我已经插入了scrollView上的所有数据。
我想做的是,我想用特定的时间自动移动scrollview页面控件。
scrollView到达最后一页时,它会再次快速调用所有页并从第一页开始。
我想在最后一页完成后非常顺利地加载/获取第一页。
用下面的代码找到我的代码。

var slides:[Slide] = [];
var offSet: CGFloat = 0
override func viewDidLoad() {
    super.viewDidLoad()

    slides = createSlides()
    setupSlideScrollView(slides: slides)

    pageControl.numberOfPages = slides.count
    pageControl.currentPage = 0
    view.bringSubview(toFront: pageControl)

    let timer = Timer.scheduledTimer(timeInterval: 3, target: self, selector: #selector(autoScroll), userInfo: nil, repeats: true)

}

@objc func autoScroll() {
    let totalPossibleOffset = CGFloat(slides.count - 1) * self.view.bounds.size.width
    if offSet == totalPossibleOffset {
        offSet = 0 // come back to the first image after the last image
    }
    else {
        offSet += self.view.bounds.size.width
    }
    DispatchQueue.main.async() {
        UIView.animate(withDuration: 0.3, delay: 0, options: UIViewAnimationOptions.curveLinear, animations: {
            self.scrollView.contentOffset.x = CGFloat(self.offSet)
        }, completion: nil)
    }
}

最佳答案

@objc func autoScroll() {
    let totalPossibleOffset = CGFloat(slides.count - 1) * self.view.bounds.size.width
    if offSet == totalPossibleOffset {
        offSet = 0 // come back to the first image after the last image
    }
    else {
        offSet += self.view.bounds.size.width
    }
    DispatchQueue.main.async() {
        UIView.animate(withDuration: 0.1, delay: 0, options: UIView.AnimationOptions.curveLinear, animations: {
            self.scrollView.scroll(topOffset:offSet, animated: true)
        }, completion: nil)
    }
}


extension UIScrollView {

    // Bonus: Scroll
    func scroll(topOffset:Float, animated: Bool) {
        let ofSetValue = CGPoint(x: topOffset, y: 0)
        setContentOffset(ofSetValue, animated: animated)
    }
}

关于ios - 使用页面 Controller 自动移动滚动 View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55739298/

10-10 14:13
查看更多