swift首页无限轮播 轻量级

作者: ShawnDu | 来源:发表于2015-11-24 14:53 被阅读3620次

swift首页轮播 轻量级 易集成

sscycle.gif

轮播终结者,用swift完成,易于集成使用,下载图片使用了SDWebImage
自己动手用swift写了一个,欢迎试用!github代码地址

网上找了一些首页轮播,写的或多或少有一些问题,用着不舒服,自己用swift写了一个轮播控件,有如下特点:

  • 下载图片使用了SDWebImage,性能高
  • 轮播图上需要点击链接,只需要调用一个block便可加上点击,易于集成
  • 支持webp格式图片

使用方法

在Podfile加入以下:

use_frameworks!
pod 'SSCycleScrollView'

这个库中支持了webp格式图片,引入了SDWebImage库。
下面可参考Demo中:
初始化时,传一个url的array,可以传本地的图片名字,也可以传网络图片;
初始化一个SSCycleScrollView:

        self.mainScrollView = SSCycleScrollView.init(frame: currentRect, animationDuration: 3, inputImageUrls: self.scrollImageUrls)
        self.mainScrollView?.tapBlock = {index in
            print("tapped page\(index)")
        }

原理SSCycleScrollView

初始化后会启动一个定时器,repeat调用一个timerFired方法,方法中每次对scrollview加一个自己宽度的offset:

func timerFired() {
let xOffset = Int(self.contentOffset.x/kScreenWidth)
let xOffsetFloat = CGFloat(xOffset) * kScreenWidth
let newOffset = CGPointMake(xOffsetFloat + CGRectGetWidth(self.frame), self.contentOffset.y)
self.setContentOffset(newOffset, animated: true)
}

没有直接加xOffset, 而是对其做了一个换算,确保每次加的offset是自己宽度的整数倍。
在scrollViewDidScroll方法,每次计算前一个,当前,后一个index,确保index范围为index >= 0 && index < allImageArray.count, 每次滚动后都会三个imageView中的image做重新赋值:

self.previousDisplayView?.image = self.allImageArray[previousArrayIndex]
self.currentDisplayView?.image = self.allImageArray[self.currentArrayIndex]
self.lastDisplayView?.image = self.allImageArray[lastArrayIndex]
self.contentOffset = CGPointMake(CGRectGetWidth(self.frame), 0)

上面最后一行设置contenOffset非常重要,每次把scrollView的位置重置为1个自身宽度的offset。

小结

如果你觉得有不好的地方,可以提出来,大家一块研究一下,欢迎常来我的仓库,别忘记给个star!

微信公众号

开发者思维 devthinking

QQ交流群:295976280

iOS交流群(一)群二维码.png

相关文章

  • swift首页无限轮播 轻量级

    swift首页轮播 轻量级 易集成 轮播终结者,用swift完成,易于集成使用,下载图片使用了SDWebImage...

  • SwiftUI实战-轮播图

    无限轮播图 相关源码:ContentView.swift CustomLoopView.swift

  • Swift 无限轮播+自动无限轮播

    title: Swift Image browserdate: 2016-10-20 12:46:08catego...

  • ios无限轮播图

    一个非常简单但很实用的无限轮播图(swift版本)UICollectionView无限轮播效果已经有很多前辈定制过...

  • Swift 无限轮播

    YLCycleView Swift无限轮播 如何使用? Demo运行会报错。请你务必对demo进行 pod ins...

  • swift第三方控件

    iOS开发:Swift实现的轮播图、无限循环视图控件CYCircularScrollView CycleScrol...

  • swift - 带进度的无限轮播barner

    swift版本的带进度的无限轮播头部bar。 HRCycleView基于UICollectionView来实现。 ...

  • Swift 无限轮播图

    上一篇:iOS12 beta 系统如何在Xcode9.4上真机调试 ICycleView ICycleView是一...

  • React-native 入坑4 无限轮播图

    无限轮播图可以说是实际在项目中用到的最多的组件,之间做过的项目一般在首页都会有无限轮播的存在。主要思路 1. in...

  • swift:无限图片轮播器

    swift:无限图片轮播器 图片轮播器用处很广,什么广告投放呀,新闻头条滚动之类的,都是使用它。出于学习的目的用s...

网友评论

  • 鬼丶白:定时器不需要放进runloop里面吗
    ShawnDu:@soime 没有放进runloop,用的默认的mode,当手拖动时,去掉了timer,拿走了又加了一次,是为了防止恢复timer时记住上次的状态,有可能刚停止拖动 就自动滚动到了下一张。默认的mode是手指拖动时timer暂停,移走时恢复。common mode是用手滚动时timer还在走
  • ShawnDu:请大家更新最新版本,做了很多修改
  • zhangjianxun:请问如何在底部加上小圆点位置指示呢?
    ShawnDu:@我是我是我zjx 这个确实没考虑到,如果要加的话,把SSCycleScrollView.swift 里面,改成继承自UIView,里面加一个UIScrollView, 加一个pageControl, 在currentArrayIndex的didSet方法里面把pageControl的currentPage改一下就行了。
  • 1c780470e7da:你好,我使用了你的控件,但是轮播图显示的尺寸和画面不符合,请问需要修改哪里?
    ShawnDu:@1c780470e7da 在MainViewController里面,有一个变量kScrollRect 这个是自己定义的滚动区域。

本文标题:swift首页无限轮播 轻量级

本文链接:https://www.haomeiwen.com/subject/ubllhttx.html