#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

  

iOS源码之OC相册,可以循环查看图片的更多相关文章

  1. ios源码-ios游戏源码-ios源码下载

    游戏源码   一款休闲类的音乐小游戏源码 该源码实现了一款休闲类的音乐小游戏源码,该游戏的源码很简单,而且游戏的玩法也很容易学会,只要我们点击视图中的grid,就可以 人气:2943运行环境:/Xco ...

  2. EarthWarrior3D游戏ios源码

    这是一款不错的ios源码源码,EarthWarrior3D游戏源码, 并且游戏源代码支持多平台. 适用于cocos v2.1.0.0版本 源码下载:http://code.662p.com/view/ ...

  3. 非常不错的点餐系统应用ios源码完整版

    该源码是一款非常不错的点餐系统应用,应用源码齐全,运行起来非常不错,基本实现了点餐的一些常用的功能,而且界面设计地也很不错,是一个不错的ios应用学习的例子,喜欢的朋友可以下载学习看看,更多ios源码 ...

  4. Spring Ioc源码分析系列--自动注入循环依赖的处理

    Spring Ioc源码分析系列--自动注入循环依赖的处理 前言 前面的文章Spring Ioc源码分析系列--Bean实例化过程(二)在讲解到Spring创建bean出现循环依赖的时候并没有深入去分 ...

  5. Face++云相册应用IOS源码

    该源码是一个不错的相册应用,Face++云相册应用源码,以人脸识别作为用户注册和登录的依据,登录后可以进入用户的云相册空间,并对相册进行上传图片或删除图片,另添加了分享功能. <ignore_j ...

  6. 《你是我的小羊驼》游戏ios源码

    <ignore_js_op> <ignore_js_op> <ignore_js_op> <ignore_js_op>源码下载:http://code. ...

  7. 卡通投掷游戏ios源码

    卡通投掷游戏源码,一款基于cocos2d很有意思的卡通投掷游戏源码,使用重力感应摇动手机让猴子打转,然后点击屏幕任何地方将猴子抛出去,抛出去的过程中会收集星星,游戏的规则就是抛得越远越好,收集的星星最 ...

  8. 一个3D ar打飞机的游戏iOS源码

    这是国内目前第一款集合了AR实景,3D游戏和人脸识别的射击游戏,通过旋转和改变手机的角度与位置,所有的射击操作都靠手势来完成,目前所有的源码全部都在这里.appStore地址:https://itun ...

  9. Apple Watch的课表应用iOS源码项目

    源码Class-Timetable,小清新风格的课表应用,可以按周或按天显示课表.按天显示时,左右滑动屏幕可以查看前一天或后一天的课表.功能:可以双模式切换(按天显示,按周显示,可以和 Apple W ...

随机推荐

  1. 【VBA】批量插入图片

    解决如下问题: 需要批量导入图片到Excel 图片放在一个文件夹中 图片有严格的顺序关系,即按照:共通名_编号的方式命名. 图片格式统一,即均为同一格式. 有两种方式可以插入图片到Excel中,其一为 ...

  2. Codeforces Gym 100114 D. Selection

    Description 问选择一个序列上的所有数的最少操作次数,跟电脑上选择文件一样,输出操作方案. Sol 贪心. 用Shift一段文件只能使用一次,之后必须一直按Ctrl了. 然后就是看用Shif ...

  3. linux文件远程传输客户端shell脚本与分布式客户机时间同步脚本

    #!/bin/bash # 将代码和脚本传送至worker节点 # 改变当前工作目录 cd ${AMAZONCRAWLER_HOME} #读取worker节点ip列表 i= while read li ...

  4. Bloom Filter 概念和原理

    Bloom filter 是由 Howard Bloom 在 1970 年提出的二进制向量数据结构,它具有很好的空间和时间效率,被用来检测一个元素是不是集合中的一个成员.如果检测结果为是,该元素不一定 ...

  5. django 操作数据库--orm(object relation mapping)---models

    思想 django为使用一种新的方式,即:关系对象映射(Object Relational Mapping,简称ORM). PHP:activerecord Java:Hibernate C#:Ent ...

  6. EXTJS 6 必填项加星号*

    /**重写ext filed组件, 实现表单必填项加红色*星号**/ Ext.override(Ext.form.field.Base,{ initComponent:function(){ if(t ...

  7. MySQL 临时表的使用

    -- step 1.创建临时表,命名为item_orders create temporary table item_orders ( item_id int, orderList ) ) -- st ...

  8. Aufs与Devicemapper的关系

    Aufs与Devicemapper的应用 Aufs是Docker最初采用的文件系统,由于Aufs未能加入到Linux内核,考虑到兼容性问题,加入了Devicemapper的支持.目前,除少数版本如Ub ...

  9. mysql同一台服务器上不同数据库中个别表内容同步

    >>>>>>soft_wsx>>>>>>--数据备份与还原>>同步备用服务器--1.完全备份主数据库--2.使用带S ...

  10. 阿里云ecs云服务器安装wdcp控制面板教程

    以前就听说服务器非常的难,而且我也不懂代码,不懂英文,我怕自己学不会就买了一个月的.开始我都不知道啥样的服务器,还是我的一位哥们给我远程买的,他说这个镜像最稳定了. 服务器买好后我便开始研究,可是怎么 ...