ios - 如何使 ScrollView 在到达最后一张图像后从第一页开始滚动?

标签 ios swift timer scrollview

我在我的应用程序中使用 ScrollView 创建了一个自动滚动横幅。有 3 张图片添加到 ScrollView ,所以我希望当滚动到达最后一张图片时,它应该从第一张图片开始并继续滚动,并且应该重复这个过程。

现在发生的事情是在到达最后一张图像后,scrollview 停止滚动。

以下是我的代码:

    func setUpScrollView() {
        let numberOfViews : Int = 3;
        for i in 0...numberOfViews-1{
            let origin = CGFloat(i) * (self.view?.frame.size.width)!
            let height : CGFloat
            height = (self.bannerScrollView?.frame.size.height)!

            let image : UIImageView = UIImageView.init(frame: CGRect(x : origin,y : 0.0,width : (self.view?.frame.size.width)!,height : height))
            image.image = UIImage.init(named: String.init(format: "banner%d", i+1))
            image.contentMode = UIViewContentMode.scaleToFill
            self.bannerScrollView?.addSubview(image)

        }
        self.bannerScrollView?.contentSize = CGSize(width: self.view.frame.size.width * CGFloat(numberOfViews), height: (self.bannerScrollView?.frame.size.height)!)
        self.timer = Timer.scheduledTimer(timeInterval: 2.0, target: self, selector: #selector(autoScroll), userInfo: nil, repeats: true)

        self.pageControl = UIPageControl.init(frame: CGRect.zero)
        self.pageControl?.numberOfPages = 3
        self.pageControl?.isEnabled = false
        self.bannerScrollView?.addSubview(self.pageControl!)        
    }


 func autoScroll() {
                let targetXOffset = (self.bannerScrollView?.contentOffset.x)! + (self.bannerScrollView?.bounds.size.width)!

                if targetXOffset <= CGFloat(((self.bannerScrollView?.contentSize.width)! - (self.bannerScrollView?.bounds.size.width)!)) {
                    self.bannerScrollView?.setContentOffset(CGPoint(x: targetXOffset,y: 0), animated: true)
                }

                let width : CGFloat = (self.bannerScrollView?.frame.size.width)!
                let page = ((self.bannerScrollView?.contentOffset.x)! + width)/width        
}

最佳答案

func autoScroll() {
    guard let scrollView = bannerScrollView else { return }
    let width: CGFloat = scrollView.bounds.width
    let targetXOffset = scrollView.contentOffset.x + width

    if targetXOffset <= CGFloat((scrollView.contentSize.width - width)) {
        scrollView.setContentOffset(CGPoint(x: targetXOffset, y: 0), animated: true)
    } else {
        scrollView.setContentOffset(CGPoint(x: 0, y: 0), animated: true)
    }

    let page = (scrollView.contentOffset.x + width)/width  
    //need to do something with this page value      
}

小心所有那些 ! - 他们正等着炸毁你

关于ios - 如何使 ScrollView 在到达最后一张图像后从第一页开始滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42678590/

相关文章:

ios - iOS 上的 Mobile Hub Cognito

ios - NSDictionary 的 NSArray 上的 NSPredicate

ios - swift NSCoder NSKeyArchiver : unexpectedly found nil while unwrapping

objective-c - iOS 定时每毫秒

c# - System.Timers.Timer 需要回到 'Main' 线程

Java 定时器和 scheduleAtFixedRate + 系统挂起

ios - CFSocket 获取其他 CFSocketContext 的回调

iOS NSManagedObjectContext - 保存所有更改后是否可以获取或发送通知?

ios - Twitter 工具包未在时间轴中显示视频

Swift - 编程 UISwipeGestureRecognizer 来单独控制 2 个对象