iOS--UIScrollView图片动画切换【实现每次只加载3张图片,进而减少占用内存,可循环滚动】
#import "ViewController.h" #define IMAGENUMBER 5
#define SIZE self.view.bounds.size
@interface ViewController ()
{
UIScrollView *_scrollerView ;
UIImageView *_leftImageView ;
UIImageView *_centerImageVIew;
UIImageView *_rightImagView;
UIPageControl *_pageCoontroller; //当前索引下标
NSInteger _curremtIndex; }
@end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.view.backgroundColor =[UIColor brownColor];
[self createScrollerView];
} -(void)createScrollerView
{
_scrollerView =[[UIScrollView alloc]initWithFrame:[[UIScreen mainScreen]bounds]]; [self.view addSubview:_scrollerView]; //创建左,中,右,三个ImageView视图
_leftImageView =[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"0.jpg"]];
_centerImageVIew =[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"1.jpg"]];
_rightImagView =[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"2.jpg"]]; _leftImageView.frame =CGRectMake(, , SIZE.width, SIZE.height);
_centerImageVIew.frame =CGRectMake(SIZE.width, , SIZE.width, SIZE.height);
_rightImagView.frame =CGRectMake(SIZE.width*, , SIZE.width, SIZE.height); //添加
[_scrollerView addSubview:_leftImageView];
[_scrollerView addSubview:_centerImageVIew];
[_scrollerView addSubview:_rightImagView];
_scrollerView.contentSize=CGSizeMake(SIZE.width*, SIZE.height);
_scrollerView.pagingEnabled=YES;
_scrollerView.delegate=self;
_scrollerView.contentOffset=CGPointMake(SIZE.width, ); _scrollerView.showsHorizontalScrollIndicator=NO;
_scrollerView.showsVerticalScrollIndicator=NO; //页码指示器
_pageCoontroller =[[UIPageControl alloc]initWithFrame:CGRectMake((SIZE.width-)/, SIZE.height-, SIZE.width-, )]; _curremtIndex=;
_pageCoontroller.numberOfPages=IMAGENUMBER;
_pageCoontroller.backgroundColor=[UIColor clearColor];
_pageCoontroller.pageIndicatorTintColor=[UIColor orangeColor];
_pageCoontroller.currentPageIndicatorTintColor=[UIColor purpleColor];
_pageCoontroller.currentPage=_curremtIndex;
[_pageCoontroller addTarget:self action:@selector(NextImageClicked) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:_pageCoontroller];
} -(void)NextImageClicked
{
NSInteger pageImage =_pageCoontroller.currentPage;
if (pageImage==_pageCoontroller.currentPage+) {
pageImage+=;
}else{
pageImage-=;
}
_curremtIndex=pageImage;
_scrollerView.contentOffset=CGPointMake(SIZE.width*pageImage, );
} -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
[self loadImage];
[UIView animateWithDuration:0.5 animations:^{
_pageCoontroller.currentPage= _curremtIndex;
}];
} -(void)loadImage
{
//创建动画效果
CATransition *transaction =[[CATransition alloc]init]; CGPoint offset =_scrollerView.contentOffset; //向右滚动
if (offset.x>) { //动画类型
transaction.type =@"fade"; //通过取余运算获取当前索引下标
_curremtIndex=(_curremtIndex+)%IMAGENUMBER;
NSString *rightImage =[NSString stringWithFormat:@"%li.jpg",_curremtIndex];
_rightImagView.image=[UIImage imageNamed:rightImage];
}else{//向左滚动
transaction.type=@"fade";
_curremtIndex=(_curremtIndex-+IMAGENUMBER)%IMAGENUMBER;
NSString *leftImage =[NSString stringWithFormat:@"%li.jpg",_curremtIndex];
_leftImageView.image=[UIImage imageNamed:leftImage];
} //添加动画效果
[_scrollerView.layer addAnimation:transaction forKey:@"transaction"];
}
iOS--UIScrollView图片动画切换【实现每次只加载3张图片,进而减少占用内存,可循环滚动】的更多相关文章
- JS获取图片的缩略图,并且动态的加载多张图片
找了好多资料也没有找到该死的ie的解决办法,最后放弃了ie <!DOCTYPE html> <html> <head> <meta charset=" ...
- Swift - 表格图片加载优化(拖动表格时不加载,停止时只加载当前页图片)
列表的单元格中包含有图片在开发中很常见.通常我们可以直接在tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIn ...
- Android ListView只加载当前屏幕内的图片(解决list滑动时加载卡顿)
最近在做ListView分页显示,其中包括图片 和文字(先下载解析文字内容,再异步加载图片)发现每次点击下一页后,文字内容加载完毕,马上向下滑动,由于这时后台在用线程池异步下载图片,我每页有20条,也 ...
- swing实现QQ登录界面1.0( 实现了同一张图片只加载一次)、(以及实现简单的布局面板添加背景图片控件的标签控件和添加一个关闭按钮控件)
swing实现QQ登录界面1.0( 实现了同一张图片只加载一次).(以及实现简单的布局面板添加背景图片控件的标签控件和添加一个关闭按钮控件) 代码思路分析: 1.(同一张图片仅仅需要加载一次就够了,下 ...
- 为网格布局图片打造的超炫 CSS 加载动画
今天,我想与大家分享一些专门为网格布局的图像制作的很酷的 CSS 加载动画效果.您可以把这些效果用在你的作品集,博客或任何你想要的网页中.设置很简单.我们使用了下面这些工具库来实现这个效果: Norm ...
- iOS:延迟加载和上拉刷新/下拉加载的实现
lazy懒加载(延迟加载)UITableView 举个例子,当我们在用网易新闻App时,看着那么多的新闻,并不是所有的都是我们感兴趣的,有的时候我们只是很快的滑过,想要快速的略过不喜欢的内容,但是只要 ...
- 【Android】再来一篇Fragment懒加载(只加载一次哦)
效果 老规矩,先来看看效果图 没错,我又入坑了,又重新做了个 Gank 客户端,因为之前那个代码写得太烂了,这次有好好的考虑了下架构之类的事,代码应该会更容易读懂了点了,吧.哈哈,再次欢迎来 star ...
- 前端图片缓存之通过img标签加载GIF只能播放一次问题(转载)
最近项目中要求再网页中插入一张gif图片,让用户每次到达该位置时动一次,所以我们就制作了一张只动一次的gif图片通过img标签引入.当用户进入该位置时,通过remove()清除图片然后重新append ...
- Angular项目中核心模块core Module只加载一次的实现
核心模块CoreModule在整个系统中只加载一次,如何实现? 创建core Modele:ng g m core 既然CoreModule是类,就有构造函数,在构造函数中进行依赖注入. export ...
随机推荐
- BZOJ3168: [Heoi2013]钙铁锌硒维生素
设$A^TC=B^T$,这样$C_{ij}$表示$B_j$的线性表出需要$A_i$,那么$B_j$可以替换$A_i$,根据$C=(A^T)^{-1}B^T$求出$C$.要求字典序最小完美匹配,先求任意 ...
- Python学习笔记——集合类型
集合类型有两种不同的类型——可变集合(set)和不可变集合(frozenset) 可变集合不是可哈希的,不能用作字典的键,也不能用做其他集合中的元素 不可变集合是有哈希值的,能被用做字典的键或者是作为 ...
- G-FAQ – Why is Bit Depth Important?
直接抄: https://apollomapping.com/2012/August/article15.html For this month’s Geospatial Frequently Ask ...
- golang的ssh包
git clone https://github.com/golang/crypto.git,复制到 golang.org/x/ 目录下. 常常用来建立ssh连接发送一条命令,但有时需要模拟ssh客户 ...
- asp.net数据控件遍历 获取当前索引
Gridview 数据访问遍历1.for遍历for (int i = 0; i <= GridView1.Rows.Count - 1; i++)//为gv的每一行增加js事件{ TextB ...
- ASP.NET 导出数据表格
功能:可以实现导出整个数据表格或整个页面 public bool ExportGv(string fileType, string fileName) { bool ...
- ajax请求webservice的过程中遇到的问题总结
前台用ajax的post方法,无法请求到webservice中的方法的时候,需要在配置文件中添加 web.config文件中的 <system.web> 节点下加入:<webServ ...
- DAY6 使用ping钥匙临时开启SSH:22端口,实现远程安全SSH登录管理就这么简单
设置防火墙策略时,关于SSH:22访问权限,我们常常会设置服务器只接受某个固定IP(如公司IP)访问,但是当我们出差或在家情况需要登录服务器怎么办呢? 常用两种解决方案:1.通过VPN操作登录主机: ...
- ReflectionToStringBuilder类
ReflectionToStringBuilder类是用来实现类中的toString()方法的类,它采用Java反射机制(Reflection),通过reflection包中的AccessibleOb ...
- php时区问题
今天遇到一个很诡异的问题: 数据库中存的日期信息为时间戳,用php取出数据库中的日期信息,并用date()函数转化为“Y-m-d”后,发现和mysql格式化函数Date_Format()处理后的结果不 ...