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

今天在写动画库的时候,突然想起来以前做一个美文软件 首页动画的时候,处理的很糟糕(那是年轻),实现上拉下拉切换的时候,是一直的创建新的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












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值