From a2589f9891509d85a873192d56e785885513e780 Mon Sep 17 00:00:00 2001 From: younger_times <841720330@qq.com> Date: 星期二, 18 七月 2023 15:54:32 +0800 Subject: [PATCH] 新增 --- WanPai/Common/View/CommonBannerView.swift | 374 ++++++++++++++++++++++++++-------------------------- 1 files changed, 187 insertions(+), 187 deletions(-) diff --git a/WanPai/Common/View/CommonBannerView.swift b/WanPai/Common/View/CommonBannerView.swift index 2af70e0..b1f4ff4 100644 --- a/WanPai/Common/View/CommonBannerView.swift +++ b/WanPai/Common/View/CommonBannerView.swift @@ -8,192 +8,192 @@ import UIKit import SDWebImage -//class CommonBannerView: 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? -// +class CommonBannerView: 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 width: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: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: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: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: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) -// -// //当前显示的只有 center_image 其他两个只是⽤来增加滑动时效果⽽已,不 -// //addTapGesWithImage(image: center_image) -// 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.sd_setImage(with: URL(string: 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 -// -//} + + 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: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: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: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: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) + + //当前显示的只有 center_image 其他两个只是⽤来增加滑动时效果⽽已,不 + //addTapGesWithImage(image: center_image) + 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.sd_setImage(with: URL(string: 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 + +} -- Gitblit v1.7.1