您的位置:首页 > 产品设计 > UI/UE

UIImageView动画 上推下拉动画 ImageView复用

2015-10-14 16:05 288 查看
今天在写动画库的时候,突然想起来以前做一个美文软件 首页动画的时候,处理的很糟糕(那是年轻),实现上拉下拉切换的时候,是一直的创建新的ImageView ,remove旧的,这样很吃资源。

所以今天我就把那个动画重写了个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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: