UIImageView动画 上推下拉动画 ImageView复用
2015-10-14 16:05
288 查看
今天在写动画库的时候,突然想起来以前做一个美文软件 首页动画的时候,处理的很糟糕(那是年轻),实现上拉下拉切换的时候,是一直的创建新的ImageView ,remove旧的,这样很吃资源。
所以今天我就把那个动画重写了个Demo,源码就放在这里了,一直是两个ImageView之间切换,重用,写的很仓促,也没时间在这里码字了,简单的注释了下,你们凑合看,我弄了个gif,效果就那样吧。
接口是随便找的一个,我把添加点击手势去除掉了,做相关跳转的话,自行添加。
导入两个库。
1.AFnetWorking
2.sdWebImage
所以今天我就把那个动画重写了个Demo,源码就放在这里了,一直是两个ImageView之间切换,重用,写的很仓促,也没时间在这里码字了,简单的注释了下,你们凑合看,我弄了个gif,效果就那样吧。
接口是随便找的一个,我把添加点击手势去除掉了,做相关跳转的话,自行添加。
导入两个库。
1.AFnetWorking
2.sdWebImage
// // ViewController.m // YYAnimation // // Created by JackYang on 15/10/13. // Copyright © 2015年 JackYang. All rights reserved. // #import "ViewController.h" #import "AFNetworking.h" #import "UIImageView+WebCache.h" #define RANDOM_COLOR [UIColor colorWithRed:arc4random()%256/255.0 green:arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1] #define kScreen_W [UIScreen mainScreen].bounds.size.width #define kScreen_H [UIScreen mainScreen].bounds.size.height #define FIRST_W kScreen_W-2*PADDING #define FIRST_H (FIRST_W)*4/3 #define PADDING 40 #define kFirstUrl @"http://api.meitianapp.com/api/v1/articles?filter=isHomepage&start=0&limit=50" typedef enum { ADD, SUB }myType; @interface ViewController () { UIImageView * oneImageView; UIImageView * anotherImageView; } @property UIImageView * firstView; @property UIImageView * secondView; @property NSMutableArray * dataSource; @property AFHTTPRequestOperationManager * manager; @property BOOL isFirstViewTop; @property int index;//判断是数组第几位 @property BOOL canUp; @property BOOL canDown; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor blackColor]; [self fetchData]; [self createUI]; // Do any additional setup after loading the view, typically from a nib. } //实验性获取数据。 -(void)fetchData{ self.index = 0; self.canUp = YES; self.canDown = NO; self.dataSource = [NSMutableArray array]; NSString * url = @"http://wenyijcc.com/services/wenyiapp/noteshandler.ashx?action=catalog"; _manager = [AFHTTPRequestOperationManager manager]; _manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"]; [_manager GET:url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { NSArray * ary = responseObject[@"datas"]; for (NSDictionary * dict in ary) { NSArray * arr = dict[@"ImageList"]; NSDictionary * dicc = arr[0]; NSString * url = dicc[@"ImageUrl"]; [self.dataSource addObject:url]; } [self.firstView sd_setImageWithURL:[NSURL URLWithString:self.dataSource[_index]]]; } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"%@",error); }]; } -(void)createUI{ self.firstView = [[UIImageView alloc]init]; self.firstView.userInteractionEnabled = YES; self.secondView = [[UIImageView alloc]init]; self.secondView.userInteractionEnabled = YES; self.firstView.frame = CGRectMake(PADDING, PADDING, FIRST_W, FIRST_H); self.secondView.frame = CGRectMake(2*PADDING, 2*PADDING, FIRST_W-4*PADDING, FIRST_H-4*PADDING); self.firstView.backgroundColor = RANDOM_COLOR; self.secondView.backgroundColor = RANDOM_COLOR; [self addgesture:self.firstView]; [self addgesture:self.secondView]; [self.view addSubview:self.secondView]; [self.view addSubview:self.firstView]; //[self.view bringSubviewToFront:self.firstView]; self.isFirstViewTop = YES; } //获取当前index -(int)getindex:(myType)type{ if(type == ADD){ if(self.index<self.dataSource.count-2){ _canUp = YES; _canDown = YES; return ++self.index; } else if(self.index == self.dataSource.count-2){ _canUp = NO; _canDown = YES; return ++self.index; } return (int)self.dataSource.count-1; } else if(type == SUB){ if(_index > 1){ _canUp = YES; _canDown = YES; return --self.index; } else if (_index == 1){ _canDown = NO; _canUp =YES; return --self.index; } else{ _canUp = YES; _canDown = NO; return 0; } } return 0; } //加载图片 -(UIImageView *)getImageWithIndex:(myType)type withImageVew:(UIImageView *)imageView{ int a = [self getindex:type]; NSLog(@"%d",a); NSString * url = self.dataSource[a]; [imageView sd_setImageWithURL:[NSURL URLWithString:url]]; return imageView; } //添加手势 - (void)addgesture:(UIImageView*)imageView{ UISwipeGestureRecognizer *upGesture = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeUp:)]; upGesture.direction = UISwipeGestureRecognizerDirectionUp; UISwipeGestureRecognizer *downGesture = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeDown:)]; downGesture.direction = UISwipeGestureRecognizerDirectionDown; //添加点击手势, // UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(detailPage:)]; [imageView addGestureRecognizer:upGesture]; [imageView addGestureRecognizer:downGesture]; // [imageView addGestureRecognizer:tapGesture]; } //上推 -(void)swipeUp:(UISwipeGestureRecognizer*)swipe{ if (self.canUp) { [self arrangeImageViews:CGRectMake(2*PADDING, 2*PADDING, FIRST_W-2*PADDING, FIRST_H-2*PADDING)andAlpha:1 andType:ADD]; [UIView animateWithDuration:0.5 animations:^{ oneImageView.frame = CGRectMake(PADDING, PADDING-600, FIRST_W, FIRST_H); oneImageView.alpha = 0; }completion:^(BOOL finished) { [self.view bringSubviewToFront:anotherImageView]; }]; [UIView animateWithDuration:0.5 animations:^{ anotherImageView.frame = CGRectMake(PADDING, PADDING, FIRST_W, FIRST_H); }]; } } //排列图片 -(void)arrangeImageViews:(CGRect)rect andAlpha:(int)p andType:(myType)type{ if(self.isFirstViewTop){ oneImageView = _firstView; anotherImageView = _secondView; } else{ oneImageView = _secondView; anotherImageView = _firstView; } self.isFirstViewTop = !self.isFirstViewTop; //[self.view bringSubviewToFront:oneImageView]; anotherImageView.frame = rect; anotherImageView.alpha = p; [self getImageWithIndex:type withImageVew:anotherImageView]; anotherImageView.backgroundColor = RANDOM_COLOR; } //下拉 -(void)swipeDown:(UISwipeGestureRecognizer*)swipe{ if(self.canDown){ [self arrangeImageViews:CGRectMake(2*PADDING, 2*PADDING-600, FIRST_W-2*PADDING, FIRST_H-2*PADDING) andAlpha:00. andType:SUB]; [self.view bringSubviewToFront:anotherImageView]; [UIView animateWithDuration:0.5 animations:^{ anotherImageView.frame = CGRectMake(PADDING, PADDING, FIRST_W, FIRST_H); anotherImageView.alpha = 1; }completion:^(BOOL finished) { }]; [UIView animateWithDuration:0.5 animations:^{ oneImageView.frame = CGRectMake(2*PADDING, 2*PADDING, FIRST_W-2*PADDING, FIRST_H-2*PADDING); }]; } } @end
相关文章推荐
- 在UIView中绘制直线、矩形、三角形
- 10.4~10.14刷题(shui)记录
- [Android UI] graphics
- 连分数(continued fraction)
- UITableView headerViewForSection 返回 (空值)
- UITapGestureRecognizer 和UIPanGestureRecognizer的使用,触摸和滑动
- UITableView的代理方法不执行的解决方案
- UIActivityIndicatorView的详细使用
- 【Android学习笔记】 蓝牙Bluetooth
- 对于动画UIDynamicAnimator的学习
- siliverlight windowless=true 模式下禁止输入中文
- easyui datagrid组件应用
- 10、建造者模式(Builder)
- 【Android】Field requires API level 4 (current min is 1): android.os.Build.VERSION#SDK_INT
- CAShapeLayer 结合 UIBezierPath 画圆
- Zynq Reseving Physical Memory Issue
- TAILQ_QUEUE队列
- 用gitUI 提交 github
- jQuey中的$(document).read(function(){})与js中window.onload的区别?
- 错误The request sent by the client was syntactically incorrect ()的解决