#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. iOS开发——UI进阶篇(七)程序启动原理、打电话、发短信

    一.Info.plist常见的设置 1.建立一个工程后,会在Supporting files文件夹下看到一个“工程名-Info.plist”的文件,该文件对工程做一些运行期的配置,非常重要,不能删除 ...

  2. BZOJ4196——noi2015软件包管理器

    1.题目大意:讲道理,就是让你有两个修改一个是把一个点到根的路径上的点权值全部变成1,另一个是把一个子树全部变成0 然后让你输出每次修改,改变的哪些节点的值 2.分析:就是一个树剖,树剖是满足dfs序 ...

  3. << CocoaPods安装和使用教程 >>github code4app以及cocoachina 苹果官方文档

    developer.apple.com 英文搜索各个技术的官方介绍文档, 前提是英文过关 cocoachina ios最新新闻, 信息 code4app上有许多组件 http://www.code4a ...

  4. java的字体的颜色,型号,大小的方法

    jTextPane1.setForeground(Color.green);//设置java字体的颜色   设置字体的颜色和型号和大小 jTextPane1.setFont(new Font(&quo ...

  5. NSOperation

    自定义operation 相比GCD,可以中断任务,也可使用 addDependency,对要执行的任务进行排序.. // // CustomOperation.h // Test // // Cre ...

  6. centos7 & mysql

    首先centos7很坑爹. 其次,在centos7上安装mysql更坑爹. 特此记录一次坑爹历程后的唯一出路. 安装mysql wget http://repo.mysql.com/mysql-com ...

  7. php过滤ascii控制字符

    还记得以前在工作中,将爬来的其它网站的数据导到xml.但是会遇到一个问题:即网页会有ascII的控制字符. 一开始以为是别人为了防止采集而加入的,然后发现一个就往过滤表里加一个.直到慢慢发现,他们都是 ...

  8. poj 2488

    http://poj.org/problem?id=2488 题意:就是让马把棋盘都走完,每一个点都要走到,出口就是a,b. #include <stdio.h> #include < ...

  9. ios UITextView 计算文字内容大小

    先设置好 textView的内容文字,再调用以下代码,就能够得到文字内容的size,其中参数表示最大的size的尺寸,通常,高度应该不限制,宽度是控件的宽度. let newSize = statem ...

  10. Java for LeetCode 224 Basic Calculator

    Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...