OC封装的轮播图->只用调用即可
来源:互联网 发布:json 数组如何表示 编辑:程序博客网 时间:2024/06/03 11:42
先来使用方法
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封装的轮播图->只用调用即可
- jquery封装 [全选] 语句,简单调用即可
- ios 对于AFNetworking3.0之前版本的Get、Post请求的封装(直接调用即可)
- jquery封装 [返回顶部] 语句,简单调用即可
- 自己封装数据库用法 只需调用即可
- 利用泛型封装BaseDao(项目中直接调用即可)
- java文件上传struts2封装调用即可(ssh框架)
- OC类的封装
- OC 封装的概念
- 只用CSS3即可实现的动画,阴影效果的表单提示框
- 封装好的Android对话框Dialog,包含了丰富的dialog样式、点击事件数据回传接口。直接调用封装好的方法即可操作dialog
- OC中类的封装
- [OC] 关于类的封装
- 二维码的扫描封装OC
- C#操作注册表类(完整版,封装了各种方法只要调用即可)
- jquery封装 [ 限制文本框只能输入数字和小数] 语句,简单调用即可
- iOS 储存用户信息设置封装 直接调用即可(部分是代码片段)
- oc 封装
- 获取日期范围内有效排期
- ubuntu14.04 源码安装OVS2.3.0
- OJ 2989 Problem D 顺序表基本运算(线性表)
- 归并排序
- python 里面的单下划线与双下划线的区别
- OC封装的轮播图->只用调用即可
- eclipse项目转Androidstudio项目过程中遇到的一系列问题及解决办法
- android开发中的兼容适配问题
- sass/scss在Hbuilder中的环境配置
- Cocoa中的位与位运算
- redis入门
- poj 2488 A Knight's Journey
- hashMap 与 TreeMap 的区别
- Hibernate基本特性和高级特性