swift .linear 类型的 iCarousel 自动滚动无限效果

Autoscrolling infinite effect in .linear type of iCarousel in swift

我需要iCarousel中.linear类型的无限自动滚动效果,我已经实现了.cylinder类型的自动滚动,但我无法在.linear类型中实现这种效果。

这是我实现.cylinder类型自动滚动的代码

carousel.type = .linear

carousel.autoscroll = -0.4;

carousel.reloadData()

是的,这在 linear 的情况下不起作用 carousel.type = .linear 所以你必须像这样制作一个自己的滚动计时器:

self.timer = NSTimer.scheduledTimerWithTimeInterval(6, target: self, selector: #selector(self.handleTimer), userInfo: nil, repeats: true)

func handleTimer(){

    if itemsScroll.count != 0{
        if itemsScroll.count-1 == index{
           index = 0           
        }
        else {
           index += 1
        }
    }
    let x = CGFloat(index)
    if index == 0 {
       carousel.scrollToOffset(x, duration: 0)
    }
    else {
       carousel.scrollToOffset(x, duration: 2)
    }
}

index用于轮播数据源获取当前数据

感谢 @salman 在 Salman 的回答的帮助下的回答我得到了一个无限解决方案,当旋转木马类型是线性时没有抽搐问题

请按照以下步骤操作。

1.为句柄滚动定义计时器

_ = Timer.scheduledTimer(timeInterval: 4, target: self, selector: #selector(self.handleTimer), userInfo: nil, repeats: true)

2。编写轮播的委托方法,并借助wrap处理wrap类型,我们解决了jerk问题。

    func carousel(_ carousel: iCarousel, valueFor option: iCarouselOption, withDefault value: CGFloat) -> CGFloat {
        switch option {
        case .wrap:
            return 1
        default:
            return value
        }
    }

3。处理滚动的方法

    func handleTimer() {
        var newIndex = self.carousel.currentItemIndex + 1

        if newIndex > self.carousel.numberOfItems {
            newIndex = 0
        }

        carousel.scrollToItem(at: newIndex, duration: 0.5)
    }