OC封装的轮播图-只用调用即可
先来使用方法
1.//创建显示本地图片view
UIView *imageScorll=[WTImageScroll ShowLocationImageScrollWithFream:CGRectMake(0, 0, SCREENWIDTH, 200) andImageArray:array andBtnClick:^(NSInteger tagValue) {
NSLog(@"点击的图片----%@",@(tagValue));
self.didSelectedImageIndex(tagValue) }];
2.//创建显示网络图片view
UIView *imageScorll=[WTImageScroll ShowNetWorkImageScrollWithFream:CGRectMake(0, 20, SCREENWIDTH, 200) andImageArray:netArray andBtnClick:^(NSInteger tagValue) {NSLog(@"点击的图片--%@",@(tagValue));
self.didSelectedImageIndex(tagValue)}];
3.//添加到父视图
[self.view addSubview:imageScorll];
4.//清楚网络图片的缓存
[WTImageScroll clearNetImageChace];
#import <UIKit/UIKit.h> typedef enum{ ImageShowStyleLocation=0, ImageShowStyleNetwork=1 }ImageShowStyle; typedef void (^BtnClickBlock)(NSInteger tagValue); @interface WTImageScroll : UIView<UIScrollViewDelegate> /** *显示本地图片 *rect:在父视图中的位置 *array:加载的图片数组 *btnClick:点击图片回调 */+(UIView *)ShowLocationImageScrollWithFream:(CGRect)rect andImageArray:(NSArray *)array andBtnClick:(BtnClickBlock)btnClick ; /** *显示网络图片 *rect:在父视图中的位置 *array:加载的图片数组--(网络图片地址) *btnClick:点击图片回调 */+(UIView *)ShowNetWorkImageScrollWithFream:(CGRect)rect andImageArray:(NSArray *)array andBtnClick:(BtnClickBlock)btnClick ; /** *清理网络缓存到内存中的图片 */+(void)clearNetImageChace; @end
.m
#import "WTImageScroll.h"#import <CommonCrypto/CommonDigest.h> #pragma mark 创建md5加密@interface NSString (MD5) //返回一个当前字符串md5加密后的结果- (NSString* )md5; @end @implementation NSString (MD5) - (NSString* )md5 { CC_MD5_CTX md5; CC_MD5_Init (&md5); CC_MD5_Update (&md5, [self UTF8String], (CC_LONG)[self length]); unsigned char digest[CC_MD5_DIGEST_LENGTH]; CC_MD5_Final (digest, &md5); NSString *s = [NSString stringWithFormat: @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", digest[0], digest[1], digest[2], digest[3], digest[4], digest[5], digest[6], digest[7], digest[8], digest[9], digest[10], digest[11], digest[12], digest[13], digest[14], digest[15]]; return s;} @end @implementation WTImageScroll { NSArray *imgArray; //图片数组 UIPageControl *pageView;//分页 BtnClickBlock btnClicks;//block UIScrollView *myScroll; NSTimer *timer;//计时器 NSInteger scrollIndex;//下表值 NSDictionary *imgChaceDic; //图片缓存} +(UIView *)ShowLocationImageScrollWithFream:(CGRect)rect andImageArray:(NSArray *)array andBtnClick:(BtnClickBlock)btnClick{ WTImageScroll *selfImageScroll=[[WTImageScroll alloc]initWithFrame:rect]; [selfImageScroll ShowImageScrollWithImageArray:array andBtnClick:btnClick andShowImageStyle:ImageShowStyleLocation]; return selfImageScroll;} +(UIView *)ShowNetWorkImageScrollWithFream:(CGRect)rect andImageArray:(NSArray *)array andBtnClick:(BtnClickBlock)btnClick{ WTImageScroll *selfImageScroll=[[WTImageScroll alloc]initWithFrame:rect]; [selfImageScroll ShowImageScrollWithImageArray:array andBtnClick:btnClick andShowImageStyle:ImageShowStyleNetwork]; return selfImageScroll;} +(void)clearNetImageChace{ [[WTImageScroll alloc] clearNetImageChace];} //控制显示-(void)ShowImageScrollWithImageArray:(NSArray *)array andBtnClick:(BtnClickBlock)btnClick andShowImageStyle:(ImageShowStyle)showStyle{ imgArray=array; btnClicks=btnClick; myScroll=[[UIScrollView alloc]initWithFrame:CGRectMake(0, 0,self.bounds.size.width, self.bounds.size.height)]; myScroll.delegate=self; myScroll.pagingEnabled=YES; myScroll.contentSize=CGSizeMake(self.bounds.size.width*(array.count+2), 200); myScroll.contentOffset=CGPointMake(self.bounds.size.width, 0); myScroll.showsHorizontalScrollIndicator=NO; [self addSubview:myScroll]; scrollIndex=1; for(NSInteger i = 0 ; i <array.count+1 ; i++){ UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom]; btn.frame=CGRectMake(self.bounds.size.width*(i+1), 0, self.bounds.size.width, self.bounds.size.height); btn.tag=100+i; if(showStyle==ImageShowStyleLocation){ [btn setImage:[UIImage imageNamed:array[i>(array.count-1)?0:i]] forState:UIControlStateNormal]; }else{ [self networkImageSettingWithString:array[i>(array.count-1)?0:i] AndShowImageView:btn]; } [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside]; [myScroll addSubview:btn]; } UIButton *regitBtn=[UIButton buttonWithType:UIButtonTypeCustom]; regitBtn.frame=CGRectMake(self.bounds.size.width*(array.count+1), 0, self.bounds.size.width, self.bounds.size.height); [myScroll addSubview:regitBtn]; UIButton *leftBtn=[UIButton buttonWithType:UIButtonTypeCustom]; leftBtn.frame=CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height); [myScroll addSubview:leftBtn]; if(showStyle==ImageShowStyleNetwork){ [self networkImageSettingWithString:[array firstObject] AndShowImageView:regitBtn]; [self networkImageSettingWithString:[array lastObject] AndShowImageView:leftBtn]; }else{ [regitBtn setImage:[UIImage imageNamed:[array firstObject]] forState:UIControlStateNormal]; [leftBtn setImage:[UIImage imageNamed:[array lastObject]] forState:UIControlStateNormal]; } pageView=[[UIPageControl alloc]initWithFrame:CGRectMake(0, self.bounds.size.height-20, self.bounds.size.width, 20)]; pageView.numberOfPages=array.count; pageView.currentPage=0; pageView.userInteractionEnabled=NO; pageView.currentPageIndicatorTintColor=[UIColor greenColor]; pageView.pageIndicatorTintColor=[UIColor grayColor]; [self addSubview:pageView]; [self startTime]; } #pragma mark ScrollView delegate- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;{ NSInteger index=scrollView.contentOffset.x/320; if(index==(imgArray.count+1)){ scrollView.contentOffset=CGPointMake(self.bounds.size.width, 0); pageView.currentPage=0; scrollIndex=1; }else if(index==0){ scrollView.contentOffset=CGPointMake(imgArray.count*self.bounds.size.width, 0); pageView.currentPage=imgArray.count-1; scrollIndex=imgArray.count; }else{ pageView.currentPage=index-1; scrollIndex=index; } [self startTime];} -(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{ //关闭计时器 if(timer!=nil){ [timer invalidate]; timer=nil; }} #pragma mark 按钮点击-(void)btnClick:(UIButton *)aBtn{ if(btnClicks){ btnClicks(aBtn.tag-100); }} #pragma mark 添加滚动-(void)scrollForTime:(NSTimer *)time{ scrollIndex=scrollIndex+1; if(scrollIndex==imgArray.count+1){ [myScroll setContentOffset:CGPointMake(self.bounds.size.width*scrollIndex, 0) animated:YES]; scrollIndex=1; [self performSelector:@selector(scrollToInit) withObject:nil afterDelay:0.5]; }else{ [myScroll setContentOffset:CGPointMake(self.bounds.size.width*scrollIndex, 0) animated:YES]; } pageView.currentPage=scrollIndex-1;} //开启定时器-(void)startTime{ if(timer==nil){ timer=[NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(scrollForTime:) userInfo:nil repeats:YES]; } } //回到原点-(void)scrollToInit{ [myScroll setContentOffset:CGPointMake(self.bounds.size.width*scrollIndex, 0) animated:NO];} #pragma mark 网络图片处理-(void)networkImageSettingWithString:(NSString *)str AndShowImageView:(UIButton *)aBtn{ /* *缓存图片原理, 三级缓存 */ NSString *md5Str=[str md5]; NSData *imgData=[imgChaceDic objectForKey:md5Str]; if(imgData){ UIImage *img=[[UIImage alloc]initWithData:imgData]; [aBtn setImage:img forState:UIControlStateNormal]; } NSString *paths = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Caches/Image"]; [self imgFileDataLocationSettingWithPath:paths]; NSString *path=[NSString stringWithFormat:@"%@/%@",paths,md5Str]; if([[NSFileManager defaultManager] fileExistsAtPath:path]){ UIImage *img=[[UIImage alloc]initWithContentsOfFile:path]; [aBtn setImage:img forState:UIControlStateNormal]; [imgChaceDic setValue:UIImagePNGRepresentation(img) forKey:@"md5Str"]; }else{ dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSData *data=[[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:str]]; UIImage *img=[[UIImage alloc]initWithData:data]; dispatch_async(dispatch_get_main_queue(), ^{ [aBtn setImage:img forState:UIControlStateNormal]; [imgChaceDic setValue:UIImagePNGRepresentation(img) forKey:@"md5Str"]; NSData *imgData=UIImagePNGRepresentation(img); [imgData writeToFile:path atomically:YES]; }); }); }} //处理缓存路径-(void)imgFileDataLocationSettingWithPath:(NSString *)path{ NSFileManager *fileManager=[NSFileManager defaultManager]; if(![fileManager fileExistsAtPath:path]){ [fileManager createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil]; } } //清理沙盒中的图片缓存-(void)clearNetImageChace{ NSString *paths = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Caches/Image"]; NSFileManager *fileManager=[NSFileManager defaultManager]; if([fileManager fileExistsAtPath:paths]){ [fileManager removeItemAtPath:paths error:nil]; } [fileManager createDirectoryAtPath:paths withIntermediateDirectories:YES attributes:nil error:nil];} @end
//点击相应方法
func didSelectedImageIndex(_ index: Int) { print("index:\(index)") let detailVC = BannerDetailVC() let model = imageArr[index] as! HeadImageModel // print("model:\(model.id)") detailVC.titleText = model.title detailVC.context = model.context self.navigationController?.pushViewController(detailVC, animated: true) }
//web页面显示 ///此处为swift3.0书写的
import UIKit class BannerDetailVC: UIViewController { var titleText : String? = "" var context : String? = "" var url : String? = "" override func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor = RGBA(r: 246, g: 246, b: 250, a: 1.0) let webView = UIWebView(frame: CGRect.init(x: 0, y: 0, width: SCREEN_WIDTH, height: SCREEN_HEIGHT)) webView.backgroundColor=UIColor.white self.view.addSubview(webView) let path = Bundle.main.bundlePath let url = NSURL(fileURLWithPath: path) webView.loadHTMLString(context!, baseURL: url as URL) self.title = titleText } }
OC封装的轮播图-只用调用即可相关推荐
- 案例——封装一个轮播图插件
说起插件,可能很多人搞不清楚插件和类库.组件.框架的区别,在这里,我先来简单的聊一聊它们之间的区别和联系 类库 提供一些真实项目中常用的方法,任何项目都可以把类库导入进来,调取里面的方法实现自己需要的 ...
- 常用插件的封装(轮播图、选项卡、楼梯导航及、拖拽)
PC端轮播图 1. 第一种轮播图(自动慢慢滑动,多用于展示) HTML部分: <div id="box"> <ul id="banner"&g ...
- 组件封装 - 轮播图组件
轮播图组件封装, 我们主要分为三大步来完成: 1. 基本布局 2. 渲染结构 3. 逻辑封装 我们这里封装的轮播图组件和 Element UI 所封装的走马灯组件有所不同 Element UI 是直接 ...
- bootstrap中轮播图、模态框、提示框/弹出框、滚动监听、弹性布局、响应式flex、多媒体对象
轮播图: bootstrap封装了轮播图的功能,其具体如下: 类名 描述 .carousel 创建一个轮播图块的容器,实质是做布局用:且此容器应该有一个di属性,其属性值提供给下面左右按钮href锚点 ...
- css轮播箭头怎么隐藏,CSS——轮播图中的箭头
注意事项: 1.定位中left权重比right高,top权重比bottom高 2.两个span标签嵌套在一个盒子中,将来显示隐藏只需要控制父盒子就行了 .box { width: 400px; hei ...
- VUE手写横向轮播图
前提:自己封装的轮播图,暂时没测出bug,有优化方案欢迎留言~ 效果如下图,一行三个,点击上一张/下一张 向前或向后移动一格,窗口缩放会适当变形,不影响切换 <template><d ...
- 微信小程序自定义swiper轮播图面板指示点|小圆点|进度条
描述: 在工作中开发一个页面,多少都会用到轮播图,但是由于微信官方提供的轮播图swiper组件局限性太大了,所以接下来我会教大家怎么去自定义轮播图的进度条. 简单修改: 如果你的项目只是简单的修改小圆 ...
- Android 加载圆角的图片轮播图
图片轮播图相信大家有不会陌生,主要用于展示广告.本篇文章是基于第三方Banner框架实现图片轮播.大家可以去看看我之前的文章:Android 广告轮播图(最简单的实现),看看是怎么基础实现. 本篇文章 ...
- 小程序轮播图高度适配
小程序轮播图适配 在开发小程序轮播图时,我遇到一下问题:小程序轮播图的导航栏总是不能放在正确的位置上,思考再三,我发现问题的原因是:当我们设置image的mode="widthFix&quo ...
最新文章
- android h5 多图上传源码,JS移动端/H5同时选择多张图片上传并使用canvas压缩图片...
- 13、Java Swing事件监听:事件处理模型和事件监听器
- Kubernetes入门——Kubernetes日志采集与监控告警
- atitit.表单验证 的dsl 本质跟 easyui ligerui比较
- Service Mesh所应对的8项挑战 1
- 8086地址传送指令LEA
- pkcs1与pkcs8格式RSA私钥互相转换
- Atitit.加密算法ati Aes的框架设计v2.2
- [笔记]WBS方法论
- Java新闻发布系统源码
- 三维模型格式总结整理
- 苹果手机屏幕镜像_苹果手机还能一键投屏?点一下小屏变大屏幕,看剧是真畅快...
- 机器学习可以应用在哪些场景
- 硬件笔记-贴片元器件焊接
- NLP基础--single-pass 聚类算法
- php post 漏洞_帝国CMS(EmpireCMS)v7.5漏洞分析 - LEOGG
- Oracle R12采购接收流程 PR PO RCV AP Payment
- 【matplotlib】图片的各种渲染效果;matplotlib.cm
- java生成签名的方法
- 【Nginx】configure 报错checking for C compiler … not found
热门文章
- 文本的DES加密 MD5散列值 DSA的数字签名
- 【视频】对RTSP抓包,分析通讯流程
- redis del清除缓存java_删除redis缓存报错
- 打印机扫描后旋转纸张_档案扫描好帮手,富士通ix1500无线双面高速扫描仪评测...
- spring 数组中随机取几个_别给孩子取这三种名字!截止年末,名字中的这几个字已经烂大街了...
- 自定义报错返回_Keras编写自定义层--以GroupNormalization为例
- spark编程基础--5.2键值对RDD
- 用Java求一个三位数,该三位数是与其每位数字的阶乘之和
- 关于MySQL的四种事务隔离级别!
- 电脑温度检测软件哪个好_一般电脑录音软件哪个好?