zoukankan      html  css  js  c++  java
  • swift bannerview 广告轮播图

    class BannerView: UIView,UIScrollViewDelegate{
     
     //图⽚⽔平放置到scrollView上
     private var scrollView:UIScrollView = UIScrollView()
     //⼩圆点标识
     private var pageControl:UIPageControl = UIPageControl()
     private var imageViews:Array = Array<UIImageView>()
     
     
     //图⽚集合
     private var images:Array<String> = []
     private var type:ImageType?
     
     private var CGFloat = 0
     private var height:CGFloat = 0
     
     private var currIndex = 0
     private var clickBlock :(Int)->Void = {index in}
     
     private var timer:Timer?
     
     // 默认⾃动播放 设置为false只能⼿动滑动
     var isAuto = true
     // 轮播间隔时间 默认6秒可以⾃⼰修改
     var interval:Double = 6
     
     private var startOffsetX:CGFloat = 0
     
     override func layoutSubviews() {
     super.layoutSubviews()
     }
     
     public func setImages(images:Array<String>,type:ImageType 
    = .Image,imageClickBlock:@escaping (Int) -> Void) {
     self.type = type
     self.images = images
     self.clickBlock = imageClickBlock
     self.initLayout()
     }
     
     private func initLayout(){
     if(self.images.count == 0){
     return
     }
     
     width = self.bounds.width
     height = self.bounds.height
     
     scrollView.frame = self.bounds
     scrollView.contentSize = CGSize(width * CGFloat(images.count + 
    2),height:height)
     scrollView.contentOffset = CGPoint(x:width,y:0)
     scrollView.isUserInteractionEnabled = true
     scrollView.isPagingEnabled = true
     scrollView.showsHorizontalScrollIndicator = false
     scrollView.delegate = self
     self.addSubview(scrollView)
     
     var image = UIImageView()
     image.frame = CGRect(x:0,y:0,width,height:height)
     image.contentMode = .scaleToFill
     image.isUserInteractionEnabled = true
     setImage(image: image, index: images.count - 1)
     scrollView.addSubview(image)
     for i in 1 ... images.count{
     let image = UIImageView()
     image.frame = CGRect(x:width * 
    CGFloat(i),y:0,width,height:height)
     image.contentMode = .scaleToFill
     image.isUserInteractionEnabled = true
     scrollView.addSubview(image)
     setImage(image: image, index: i - 1)
     addTapGesWithImage(image: image)
     }
     image = UIImageView()
     image.frame = CGRect(x:width * CGFloat(images.count + 
    1),y:0,width,height:height)
     image.contentMode = .scaleToFill
     image.isUserInteractionEnabled = true
     scrollView.addSubview(image)
     setImage(image: image, index: 0)
     
     pageControl.center = CGPoint(x:width/2,y:height - CGFloat(15))
     pageControl.isEnabled = true
     pageControl.numberOfPages = images.count
     pageControl.currentPageIndicatorTintColor = UIColor.green
     pageControl.pageIndicatorTintColor = UIColor.gray
     pageControl.isUserInteractionEnabled = false
     self.addSubview(pageControl)
     if(isAuto){
     openTimer()
     }
     setCurrent(currIndex: 0)
     }
     
     private func setImage(image:UIImageView,index:Int){
     if(type == .Image){
     image.image = UIImage.init(named:images[index])
     }else{
     image.setMyImage(url: images[index])
     }
     }
     
     func setCurrent(currIndex:Int) {
     if(currIndex < 0){
     self.currIndex = images.count - 1
     }else{
     self.currIndex = currIndex
     }
     pageControl.currentPage = self.currIndex
     scrollView.setContentOffset(CGPoint(x:width * CGFloat(self.currIndex + 
    1),y:0), animated: false)
     }
     
     //给图⽚添加点击⼿势
     private func addTapGesWithImage(image:UIImageView) {
     let tap = UITapGestureRecognizer(target: self, action: #selector(tap(_:)))
     image.isUserInteractionEnabled = true //让控件可以触发交互事件
     image.contentMode = .scaleToFill
    // image.clipsToBounds = true //超出⽗控件的部分不显示
     image.addGestureRecognizer(tap)
     }
     
     //点击图⽚,调⽤block
     @objc func tap(_ ges:UITapGestureRecognizer) {
     clickBlock((ges.view?.tag)!)
     }
     
     func scrollViewDidScroll(_ scrollView: UIScrollView) {
     
     }
     
     func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
     startOffsetX = scrollView.contentOffset.x
     closeTimer()
     }
     
     func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate 
    decelerate: Bool) {
     }
     
     func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
     if(scrollView.contentOffset.x > startOffsetX){
     currIndex = (currIndex + 1) % images.count
     }else{
     currIndex = (currIndex - 1) % images.count
     }
     setCurrent(currIndex: currIndex)
     openTimer()
     }
     
     func openTimer(){
     if(isAuto){
     closeTimer()
     timer = Timer.scheduledTimer(timeInterval: interval, target: self, selector: 
    #selector(startAutoScroll), userInfo: nil, repeats: true)
     }
     }
     
     func closeTimer(){
     if(timer != nil){
     timer?.invalidate()
     timer = nil
     }
     }
     
     
     @objc func startAutoScroll(){
     if(isDisplayInScreen()){
     setCurrent(currIndex: (currIndex + 1) % images.count)
     }
     }
     
     func isDisplayInScreen() -> Bool{
     if(self.window == nil){
     return false
     }
     return true
     }
     
    }
    enum ImageType{
     case Image //本地图⽚
     case URL //URL
    }
      
  • 相关阅读:
    数据访问(从数据库中访问数据)
    加载类、设计模式(单例模式和工厂模式)
    面向对象之静态
    面向对象三大特性之继承和多态
    面向对象三大特性之封装
    面向对象基础知识
    mysql下载与安装过程
    Idea添加依赖的步骤:
    Java JDBC 在IDEA环境下连接MySQL
    JAVA中集合HashMap嵌套联系
  • 原文地址:https://www.cnblogs.com/rchao/p/11989979.html
Copyright © 2011-2022 走看看