iOS源码之OC相册,可以循环查看图片

简介: #import "ViewController.h" #import "YZUIScrollView.h" #define kuan ([UIScreen mainScreen].bounds.
#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

  

 

相关文章
|
6月前
|
JSON JavaScript 安全
iOS应用程序数据保护:如何保护iOS应用程序中的图片、资源和敏感数据
iOS应用程序数据保护:如何保护iOS应用程序中的图片、资源和敏感数据
61 1
|
6月前
|
存储 缓存 安全
基于iOS平台的高效图片缓存策略实现
【4月更文挑战第22天】 在移动应用开发中,图片资源的加载与缓存是影响用户体验的重要因素之一。尤其对于iOS平台,由于设备存储空间的限制以及用户对流畅性的高要求,设计一种合理的图片缓存策略显得尤为关键。本文将探讨在iOS环境下,如何通过使用先进的图片缓存技术,包括内存缓存、磁盘缓存以及网络请求的优化,来提高应用的性能和响应速度。我们将重点分析多级缓存机制的设计与实现,并对可能出现的问题及其解决方案进行讨论。
|
6月前
|
存储 缓存 算法
实现iOS平台的高效图片缓存策略
【4月更文挑战第22天】在移动应用开发中,图片资源的处理是影响用户体验的重要因素之一。特别是对于图像资源密集型的iOS应用,如何有效地缓存图片以减少内存占用和提升加载速度,是开发者们面临的关键挑战。本文将探讨一种针对iOS平台的图片缓存策略,该策略通过结合内存缓存与磁盘缓存的机制,并采用先进的图片解码和异步加载技术,旨在实现快速加载的同时,保持应用的内存效率。
|
6月前
|
存储 缓存 编解码
实现iOS平台的高效图片缓存策略
【4月更文挑战第23天】在移动应用开发领域,尤其是图像处理密集型的iOS应用中,高效的图片缓存策略对于提升用户体验和节省系统资源至关重要。本文将探讨一种针对iOS平台设计的图片缓存方案,该方案通过结合内存缓存与磁盘缓存的多层次结构,旨在优化图片加载性能并降低内存占用。我们将深入分析其设计理念、核心组件以及在实际场景中的应用效果,同时对比其他常见缓存技术的优势与局限。
|
6月前
|
存储 Web App开发 Android开发
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
655 1
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
|
5月前
|
Linux 数据库 iOS开发
超级签名源码/超级签/ios分发/签名端本地linux服务器完成签名
该系统完全在linux下运行,不存在使用第三方收费工具,市面上很多系统都是使用的是第三方收费系统,例如:某心签名工具,某测侠等,不开源而且需要每年交费,这种系统只是在这些工具的基础上套了一层壳。请需要系统的放大你们的眼睛。
42 0
|
6月前
|
安全 数据安全/隐私保护 iOS开发
iOS 动态权限管理:向用户索取相机和相册访问权限
【4月更文挑战第16天】 在移动应用开发中,尤其是针对iOS平台,用户隐私保护已成为不可忽视的要素。随着苹果对隐私政策的不断收紧,如何优雅地向用户请求访问其设备上敏感资源的权限,成为了开发者必须面对的挑战。本文将深入探讨如何在iOS应用中实现动态权限管理,重点讨论相机和相册访问权限的请求过程,并指导读者通过编程方式提升用户体验与满足数据保护规范之间的平衡。
|
6月前
按钮的image图片是非圆角,直接对UIButton设置圆角,iOS13系统没有圆角效果的问题及解决方案
按钮的image图片是非圆角,直接对UIButton设置圆角,iOS13系统没有圆角效果的问题及解决方案
50 0
|
6月前
|
存储 缓存 iOS开发
实现iOS平台的高效图片缓存策略
【4月更文挑战第4天】在移动应用开发中,图片资源的加载与缓存是影响用户体验的关键因素之一。尤其对于iOS平台,由于设备存储和内存资源的限制,设计一个高效的图片缓存机制尤为重要。本文将深入探讨在iOS环境下,如何通过技术手段实现图片的高效加载与缓存,包括内存缓存、磁盘缓存以及网络层面的优化,旨在为用户提供流畅且稳定的图片浏览体验。
|
6月前
|
存储 缓存 监控
实现iOS平台的高效图片缓存策略
【4月更文挑战第18天】在移动应用开发中,图片资源的加载与缓存是影响用户体验的重要因素之一。特别是对于iOS平台,合理设计图片缓存策略不仅能够提高应用的响应速度,还能降低内存消耗和网络流量。本文将探讨一种针对iOS环境的图片缓存方案,该方案通过多级缓存机制、内存管理和磁盘存储策略相结合,旨在提升图片加载效率并优化性能。