在swift中自动滚动线性类型的iCarousel中的无限效果

时间:2017-07-06 13:45:51

标签: swift xcode icarousel

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

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

carousel.type = .linear

carousel.autoscroll = -0.4;

carousel.reloadData()

2 个答案:

答案 0 :(得分:2)

是的,在carousel.type = .linear的情况下,这不起作用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用于获取轮播数据源的当前数据。

答案 1 :(得分:2)

感谢 @salman 在萨尔曼答案的帮助下获得答案我得到了无限解决方案的解决方案,当旋转木马类型为线性时没有出现问题

请按照以下步骤操作。

<强> 1。定义手柄滚动的计时器

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

<强> 2。在包裹的帮助下写下轮播的委托方法并处理包裹类型我们解决了混蛋问题。

    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)
    }