先来使用方法

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封装的轮播图-只用调用即可相关推荐

  1. 案例——封装一个轮播图插件

    说起插件,可能很多人搞不清楚插件和类库.组件.框架的区别,在这里,我先来简单的聊一聊它们之间的区别和联系 类库 提供一些真实项目中常用的方法,任何项目都可以把类库导入进来,调取里面的方法实现自己需要的 ...

  2. 常用插件的封装(轮播图、选项卡、楼梯导航及、拖拽)

    PC端轮播图 1. 第一种轮播图(自动慢慢滑动,多用于展示) HTML部分: <div id="box"> <ul id="banner"&g ...

  3. 组件封装 - 轮播图组件

    轮播图组件封装, 我们主要分为三大步来完成: 1. 基本布局 2. 渲染结构 3. 逻辑封装 我们这里封装的轮播图组件和 Element UI 所封装的走马灯组件有所不同 Element UI 是直接 ...

  4. bootstrap中轮播图、模态框、提示框/弹出框、滚动监听、弹性布局、响应式flex、多媒体对象

    轮播图: bootstrap封装了轮播图的功能,其具体如下: 类名 描述 .carousel 创建一个轮播图块的容器,实质是做布局用:且此容器应该有一个di属性,其属性值提供给下面左右按钮href锚点 ...

  5. css轮播箭头怎么隐藏,CSS——轮播图中的箭头

    注意事项: 1.定位中left权重比right高,top权重比bottom高 2.两个span标签嵌套在一个盒子中,将来显示隐藏只需要控制父盒子就行了 .box { width: 400px; hei ...

  6. VUE手写横向轮播图

    前提:自己封装的轮播图,暂时没测出bug,有优化方案欢迎留言~ 效果如下图,一行三个,点击上一张/下一张 向前或向后移动一格,窗口缩放会适当变形,不影响切换 <template><d ...

  7. 微信小程序自定义swiper轮播图面板指示点|小圆点|进度条

    描述: 在工作中开发一个页面,多少都会用到轮播图,但是由于微信官方提供的轮播图swiper组件局限性太大了,所以接下来我会教大家怎么去自定义轮播图的进度条. 简单修改: 如果你的项目只是简单的修改小圆 ...

  8. Android 加载圆角的图片轮播图

    图片轮播图相信大家有不会陌生,主要用于展示广告.本篇文章是基于第三方Banner框架实现图片轮播.大家可以去看看我之前的文章:Android 广告轮播图(最简单的实现),看看是怎么基础实现. 本篇文章 ...

  9. 小程序轮播图高度适配

    小程序轮播图适配 在开发小程序轮播图时,我遇到一下问题:小程序轮播图的导航栏总是不能放在正确的位置上,思考再三,我发现问题的原因是:当我们设置image的mode="widthFix&quo ...

最新文章

  1. android h5 多图上传源码,JS移动端/H5同时选择多张图片上传并使用canvas压缩图片...
  2. 13、Java Swing事件监听:事件处理模型和事件监听器
  3. Kubernetes入门——Kubernetes日志采集与监控告警
  4. atitit.表单验证 的dsl 本质跟 easyui ligerui比较
  5. Service Mesh所应对的8项挑战 1
  6. 8086地址传送指令LEA
  7. pkcs1与pkcs8格式RSA私钥互相转换
  8. Atitit.加密算法ati Aes的框架设计v2.2
  9. [笔记]WBS方法论
  10. Java新闻发布系统源码
  11. 三维模型格式总结整理
  12. 苹果手机屏幕镜像_苹果手机还能一键投屏?点一下小屏变大屏幕,看剧是真畅快...
  13. 机器学习可以应用在哪些场景
  14. 硬件笔记-贴片元器件焊接
  15. NLP基础--single-pass 聚类算法
  16. php post 漏洞_帝国CMS(EmpireCMS)v7.5漏洞分析 - LEOGG
  17. Oracle R12采购接收流程 PR PO RCV AP Payment
  18. 【matplotlib】图片的各种渲染效果;matplotlib.cm
  19. java生成签名的方法
  20. 【Nginx】configure 报错checking for C compiler … not found

热门文章

  1. 文本的DES加密 MD5散列值 DSA的数字签名
  2. 【视频】对RTSP抓包,分析通讯流程
  3. redis del清除缓存java_删除redis缓存报错
  4. 打印机扫描后旋转纸张_档案扫描好帮手,富士通ix1500无线双面高速扫描仪评测...
  5. spring 数组中随机取几个_别给孩子取这三种名字!截止年末,名字中的这几个字已经烂大街了...
  6. 自定义报错返回_Keras编写自定义层--以GroupNormalization为例
  7. spark编程基础--5.2键值对RDD
  8. 用Java求一个三位数,该三位数是与其每位数字的阶乘之和
  9. 关于MySQL的四种事务隔离级别!
  10. 电脑温度检测软件哪个好_一般电脑录音软件哪个好?