iOS之OC源码相册循环查看图片功能的实现

来源:互联网 发布:电信光猫网络不稳定 编辑:程序博客网 时间:2024/06/01 17:31
#import "ViewController.h"#import "YZUIScrollView.h"#define kuan ([UIScreen mainScreen].bounds.size.width+20)#define gao [UIScreen mainScreen].bounds.size.height@interface ViewController ()<UIScrollViewDelegate>@property (weak, nonatomic) IBOutlet UIScrollView *huaBu;@property(nonatomic,strong)NSArray *images;@property(nonatomic)NSInteger currentIndex;@end@implementation ViewController//懒加载,调用get方法时对属性进行初始化-(NSArray *)images{    if(_images==nil)    {        NSMutableArray *imagearray=[NSMutableArray array];        for (int i=1; i<7; i++) {            NSString *imageName=[NSString stringWithFormat:@"new_feature_%d",i];            UIImage *image=[UIImage imageNamed:imageName];            [imagearray addObject:image];        }        _images=imagearray;    }    return _images;}- (void)viewDidLoad {    [super viewDidLoad];    //设置UIScrollView的contentSize    _huaBu.contentSize=CGSizeMake(kuan*3, gao);    //设置分页    _huaBu.pagingEnabled=YES;    //隐藏水平滚动栏和垂直滚动栏    _huaBu.showsHorizontalScrollIndicator=NO;    _huaBu.showsVerticalScrollIndicator=NO;    //设置背景颜色,突出不同的图片    _huaBu.backgroundColor=[UIColor blackColor];    //设置代理要遵守协议<UIScrollViewDelegate>    _huaBu.delegate=self;    //调用方法添加子视图    [self tianJiaZiShiTu];    //调用方法添加图片    [self tianJiaTuPian];}//添加子视图的方法-(void)tianJiaZiShiTu{    //相册的话,是一个大的UIScrollView中放了很多的小UIScrollView,但是为了节省内存空间,所以只是添加了三个UIScrollView(图片不停的变换位置)    for (int i=0; i<3; i++) {        //创建YZUIScrollView        YZUIScrollView * yzuisv=[[YZUIScrollView alloc] initWithFrame:CGRectMake(kuan*i, 0, kuan-20, gao)];        //添加YZUIScrollView        [_huaBu addSubview:yzuisv];        //设置tag值,便于区分        yzuisv.tag=1000+i;    }}//添加方法的图片-(void)tianJiaTuPian{    YZUIScrollView *leftSC=(YZUIScrollView *)[_huaBu viewWithTag:1000];    YZUIScrollView *middleSC=(YZUIScrollView *)[_huaBu viewWithTag:1001];    YZUIScrollView *rightSC=(YZUIScrollView *)[_huaBu viewWithTag:1002];    leftSC.image=self.images[[self indexFofEnable:_currentIndex-1]];    middleSC.image=self.images[[self indexFofEnable:_currentIndex]];    rightSC.image=self.images[[self indexFofEnable:_currentIndex+1]];    //设置偏移量,这步很重要    _huaBu.contentOffset=CGPointMake(kuan, 0);}//确保索引可用-(NSInteger)indexFofEnable:(NSInteger)index{    if(index<0)    {        return self.images.count-1;    }    else if (index>self.images.count-1)    {        return 0;    }    else        return index;}//滚动结束后,把所有的缩放视图比例还原为1.0-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{    for (id obj in _huaBu.subviews) {        if([obj isKindOfClass:[UIScrollView class]])        {            UIScrollView *scaleSC=(UIScrollView *)obj;            scaleSC.zoomScale=1.0;        }    }    //判断左右滑动    //偏移量的x为0,就是说明向右滑动了,就是看的之前左边的那张图片    if(scrollView.contentOffset.x==0)    {        //对应的图像应该是变成左边的图像        _currentIndex--;    }    //偏移量的x为两个屏幕的宽,就是说明向左滑动了,就是看的之前右边的那张图片    else if(scrollView.contentOffset.x== kuan*2)    {        //对应的图像应该是变成右边的图像        _currentIndex++;    }    _currentIndex=[self indexFofEnable:_currentIndex];    [self tianJiaTuPian];}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}@end
<pre name="code" class="objc">//第二个类#import "YZUIScrollView.h"@interface YZUIScrollView ()<UIScrollViewDelegate>@property(nonatomic,strong)UIImageView *imageview;@property(nonatomic,strong)UIImage *image;//内容视图的图片@end@implementation YZUIScrollView-(instancetype)initWithFrame:(CGRect)frame{    if(self =[super initWithFrame:frame])    {        //添加内容视图        UIImageView *imageview1=[[UIImageView alloc] initWithFrame:self.bounds];        [self addSubview:imageview1];        _imageview=imageview1;        //设置最大最小倍数和代理        self.minimumZoomScale=0.5;        self.maximumZoomScale=1.5;        self.delegate=self;        //双击事件        UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(shuangJi:)];        tap.numberOfTapsRequired=2;        [self addGestureRecognizer:tap];    }    return self;}-(void)shuangJi:(UITapGestureRecognizer *)tap{    //当缩放比例不为1.0,还原缩放比例    if (self.zoomScale !=1.0) {        [self setZoomScale:1.0 animated:YES];        return ;    }    CGPoint location =[tap locationInView:self];    CGRect rect =CGRectMake(location.x-100, location.y-100,200,200);    [self zoomToRect:rect animated:YES];}//重写setImg方法-(void)setImage:(UIImage *)image{    //set本身的方法要完成的事必须完成    _image=image;    //设置内容视图的图片    _imageview.image=image;}//UIScrollViewDelegate代理方法-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{    return _imageview;}@end



0 0
原创粉丝点击