zoukankan      html  css  js  c++  java
  • iOS源码之OC相册,可以循环查看图片

    #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
    

      第二个类

    #import "YZUIScrollView.h"
    
    
    @interface YZUIScrollView ()<UIScrollViewDelegate>
    @property(nonatomic,strong)UIImage *image;//内容视图的图片
    @property(nonatomic,strong)UIImageView *imageview;
    @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
    

      

     

  • 相关阅读:
    莫名其妙的float:left; 不能使元素紧贴父级的坑
    将HTML元素转换成图片供用户下载(html2canvas + canvas2Image)
    使用Git代替FTP进行虚拟主机的代码管理
    jQuery: on()特别的几种用法
    监控页面后退前进,浏览器文档加载事件之pageshow、pagehide
    博客园Markdown编辑器试玩~~~
    移动端调试神器(eruda)
    移动端分享插件使用总结
    sqlloader的使用------windows版
    运维工作总结教训
  • 原文地址:https://www.cnblogs.com/BK-12345/p/5128396.html
Copyright © 2011-2022 走看看