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
iOS源码之OC相册,可以循环查看图片的更多相关文章
- ios源码-ios游戏源码-ios源码下载
游戏源码 一款休闲类的音乐小游戏源码 该源码实现了一款休闲类的音乐小游戏源码,该游戏的源码很简单,而且游戏的玩法也很容易学会,只要我们点击视图中的grid,就可以 人气:2943运行环境:/Xco ...
- EarthWarrior3D游戏ios源码
这是一款不错的ios源码源码,EarthWarrior3D游戏源码, 并且游戏源代码支持多平台. 适用于cocos v2.1.0.0版本 源码下载:http://code.662p.com/view/ ...
- 非常不错的点餐系统应用ios源码完整版
该源码是一款非常不错的点餐系统应用,应用源码齐全,运行起来非常不错,基本实现了点餐的一些常用的功能,而且界面设计地也很不错,是一个不错的ios应用学习的例子,喜欢的朋友可以下载学习看看,更多ios源码 ...
- Spring Ioc源码分析系列--自动注入循环依赖的处理
Spring Ioc源码分析系列--自动注入循环依赖的处理 前言 前面的文章Spring Ioc源码分析系列--Bean实例化过程(二)在讲解到Spring创建bean出现循环依赖的时候并没有深入去分 ...
- Face++云相册应用IOS源码
该源码是一个不错的相册应用,Face++云相册应用源码,以人脸识别作为用户注册和登录的依据,登录后可以进入用户的云相册空间,并对相册进行上传图片或删除图片,另添加了分享功能. <ignore_j ...
- 《你是我的小羊驼》游戏ios源码
<ignore_js_op> <ignore_js_op> <ignore_js_op> <ignore_js_op>源码下载:http://code. ...
- 卡通投掷游戏ios源码
卡通投掷游戏源码,一款基于cocos2d很有意思的卡通投掷游戏源码,使用重力感应摇动手机让猴子打转,然后点击屏幕任何地方将猴子抛出去,抛出去的过程中会收集星星,游戏的规则就是抛得越远越好,收集的星星最 ...
- 一个3D ar打飞机的游戏iOS源码
这是国内目前第一款集合了AR实景,3D游戏和人脸识别的射击游戏,通过旋转和改变手机的角度与位置,所有的射击操作都靠手势来完成,目前所有的源码全部都在这里.appStore地址:https://itun ...
- Apple Watch的课表应用iOS源码项目
源码Class-Timetable,小清新风格的课表应用,可以按周或按天显示课表.按天显示时,左右滑动屏幕可以查看前一天或后一天的课表.功能:可以双模式切换(按天显示,按周显示,可以和 Apple W ...
随机推荐
- Codeforces 260 B. Fedya and Maths
题目链接:http://codeforces.com/contest/456/problem/B 解题报告:输入一个n,让你判断(1n + 2n + 3n + 4n) mod 5的结果是多少?注意n的 ...
- iOS开发——UI进阶篇(十三)UITabBarController简单使用,qq主流框架
一.UITabBarController简单使用 // 程序加载完毕 - (BOOL)application:(UIApplication *)application didFinishLaunchi ...
- BZOJ2555——SubString
0.题目很短,就不概括了 给你一个字符串init,要求你支持两个操作 (1):在当前字符串的后面插入一个字符串 (2):询问字符串s在当前字符串中出现了几次?(作为连续子串) 你必须在线支持这些操作. ...
- python os.path.dirname 是什么目录
这个获取文件路径中所在的目录. 1 2 3 4 5 6 7 In [1]: import os In [2]: os.__file__ Out[2]: '/usr/lib/python2.7/os ...
- PYTHON 购物车程序
product_list = [ ('iphone',50000), ('Mac Pro',9900), ('Bike',8000), ('Watch',160000), ('Coffee',600) ...
- faac编码aac
// faacode.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <faac.h> #include &l ...
- Buzz words
给你一个字符串和字典,从头扫到位,如果到当前的字符的字符串存在于字典中,则显示 buzz. 例子: ILOVEPINEAPPLEJUICE 字典: [pine, apple, pineapple, j ...
- java入门第一季2
1. 变量:在java中,我们通过三个元素描述变量:变量类型,变量名以及变量值 注意:java中的标点符号都是英文的 2. 变量名= 首字母+其余部分 字母,+ 字母 下划线, 数字 $ ...
- [Error] Error parsing XML: unbound prefix
发生该错误的代码: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:an ...
- 【leetcode】LRU Cache(hard)★
Design and implement a data structure for Least Recently Used (LRU) cache. It should support the fol ...