高仿探探卡片滑动

1、卡片四个方向角滑动
2、右like左dislike
运行效果如下
这里写图片描述
代码如下:
宏定义文件

#ifndef PrefixHeader_pch
#define PrefixHeader_pch

#define iPhone5AndEarlyDevice (([[UIScreen mainScreen] bounds].size.height*[[UIScreen mainScreen] bounds].size.width <= 320*568)?YES:NO)
#define Iphone6 (([[UIScreen mainScreen] bounds].size.height*[[UIScreen mainScreen] bounds].size.width <= 375*667)?YES:NO)

#endif /* PrefixHeader_pch */
#ifndef CardHeader_h
#define CardHeader_h

#define iPhone5AndEarlyDevice (([[UIScreen mainScreen] bounds].size.height*[[UIScreen mainScreen] bounds].size.width <= 320*568)?YES:NO)
#define Iphone6 (([[UIScreen mainScreen] bounds].size.height*[[UIScreen mainScreen] bounds].size.width <= 375*667)?YES:NO)

static inline float lengthFit(float iphone6PlusLength){
    if (iPhone5AndEarlyDevice) {
        return iphone6PlusLength * 320.0f / 414.0f;
    }

    if (Iphone6) {
        return iphone6PlusLength * 375.0f / 414.0f;
    }
    return iphone6PlusLength;

}

#define PAN_DISTANCE 120
#define CARD_WIDTH lengthFit(333)
#define CARD_HEIGHT lengthFit(400)

#endif /* CardHeader_h */

卡片功能分类

#import <UIKit/UIKit.h>
#define ROTATION_ANGLE M_PI/8
#define CLICK_ANIMATION_TIME 0.5
#define RESET_ANIMATION_TIME 0.3

@class DragCardView;
@protocol DragCardViewDelegate <NSObject>

-(void)swipCard:(DragCardView *)cardView Direction:(BOOL)isRight;
-(void)moveCards:(CGFloat)distance;
-(void)moveBackCards;
-(void)adjustOtherCards;

@end


@interface DragCardView : UIView

@property (nonatomic, weak) id<DragCardViewDelegate> delegate;
@property (nonatomic, strong) UIPanGestureRecognizer *panGesture;
@property (nonatomic, assign) CGAffineTransform originalTransform;
@property (nonatomic, assign) CGPoint originalPoint;
@property (nonatomic, assign) CGPoint originalCenter;
@property (nonatomic, assign) BOOL canPan;
@property (nonatomic, strong) NSDictionary *infoDict;
@property (nonatomic, strong) UIImageView *headerImageView;
@property (nonatomic, strong) UILabel *numLabel;
@property (nonatomic, strong) UIButton *noButton;
@property (nonatomic, strong) UIButton *yesButton;


-(void)leftButtonClickAction;
-(void)rightButtonClickAction;

@end
#import "DragCardView.h"
#import "CardHeader.h"

#define ACTION_MARGIN_RIGHT lengthFit(150)
#define ACTION_MARGIN_LefT lengthFit(150)
#define ACTION_VELOCITY 400
#define SCALE_STRENGTH 4
#define SCALE_MAX 0.93
#define ROTATION_MAX 1
#define ROTATION_STRENGTH lengthFit(414)
#define BUTTON_WIDTH lengthFit(40)

@interface DragCardView(){
    CGFloat xFromCenter;
    CGFloat yFromCenter;

}

@property (nonatomic, strong) UILabel *namelabel;
@end

@implementation DragCardView

-(instancetype)initWithFrame:(CGRect)frame{
    self = [super initWithFrame:frame];
    if (self) {
        self.backgroundColor = [UIColor whiteColor];
        self.layer.cornerRadius = 4;
        self.layer.shadowRadius = 3;
        self.layer.shadowOpacity = 0.2;
        self.layer.shadowOffset = CGSizeMake(1, 1);
        self.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.bounds].CGPath;

        self.panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(beingDragged:)];
        [self addGestureRecognizer:self.panGesture];

        UIView *bgView = [[UIView alloc] initWithFrame:self.bounds];
        bgView.layer.cornerRadius = 4;
        bgView.clipsToBounds = YES;
        [self addSubview:bgView];

        self.headerImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.width)];
        self.headerImageView.backgroundColor = [UIColor lightGrayColor];
        self.headerImageView.userInteractionEnabled = YES;
        [bgView addSubview:self.headerImageView];

        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGesture:)];
        [self.headerImageView addGestureRecognizer:tap];

        self.namelabel = [[UILabel alloc] initWithFrame:CGRectMake(20, self.frame.size.width + 10, self.frame.size.width - 40, 20)];
        self.namelabel.font = [UIFont systemFontOfSize:16];
        self.namelabel.textColor = [UIColor colorWithRed:51/255.0 green:51/255.0 blue:51/255.0 alpha:1];
        [bgView addSubview:self.namelabel];

        UILabel *alertLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, self.frame.size.width + 30, self.frame.size.width - 40, 20)];
        alertLabel.font = [UIFont systemFontOfSize:12];
        alertLabel.textColor = [UIColor colorWithRed:155/255.0 green:155/255.0 blue:155/255.0 alpha:1];
        alertLabel.text = @"其它,10km";
        [bgView addSubview:alertLabel];

        self.layer.allowsEdgeAntialiasing = YES;
        bgView.layer.allowsEdgeAntialiasing = YES;
        self.headerImageView.layer.allowsEdgeAntialiasing = YES;

    }
    return self;

}

-(void)tapGesture:(UITapGestureRecognizer *)sender{
    if (!self.canPan) {
        return;
    }
    NSLog(@"tap");
}

-(void)layoutSubviews{
    self.namelabel.text = [NSString stringWithFormat:@"郑爽 %@号",self.infoDict[@"number"]];
    self.headerImageView.image = [UIImage imageNamed:self.infoDict[@"image"]];
}

#pragma mark-拖动手势
-(void)beingDragged:(UIPanGestureRecognizer *)gesture{
    if (!self.canPan) {
        return;
    }
    xFromCenter = [gesture translationInView:self].x;
    yFromCenter = [gesture translationInView:self].y;
    switch (gesture.state) {
        case UIGestureRecognizerStateBegan:
        {

        }
            break;
        case UIGestureRecognizerStateChanged:
        {
            CGFloat rotationStrength = MIN(xFromCenter/ROTATION_STRENGTH, ROTATION_MAX);
            CGFloat rotationAngel = (CGFloat)(ROTATION_ANGLE * rotationStrength);
            CGFloat scale = MAX(1- fabs(rotationStrength)/SCALE_STRENGTH, SCALE_MAX);
            self.center = CGPointMake(self.originalCenter.x + xFromCenter, self.originalCenter.y + yFromCenter);

            CGAffineTransform transform = CGAffineTransformMakeRotation(rotationAngel);
            CGAffineTransform scaleTransform = CGAffineTransformScale(transform, scale, scale);
            self.transform = scaleTransform;
            [self updateOverLay:xFromCenter];
        }
            break;
        case UIGestureRecognizerStateEnded:
        {
            [self followUpActionWithDistance:xFromCenter andVelocity:[gesture velocityInView:self.superview]];
        }
            break;
        default:
            break;
    }

}

#pragma mark--滑动时候,按钮变大
-(void)updateOverLay:(CGFloat)distance{
    [self.delegate moveCards:distance];
}

#pragma mark--后续动作判断
-(void)followUpActionWithDistance:(CGFloat)distance andVelocity:(CGPoint)velocity{

    if (xFromCenter > 0 && (distance > ACTION_MARGIN_RIGHT || velocity.x > ACTION_VELOCITY)) {
        [self rightAction:velocity];
    }else if (xFromCenter <0 &&(distance <-ACTION_MARGIN_RIGHT || velocity.x<-ACTION_VELOCITY)){
        [self leftAction:velocity];
    }else{
        //回到原点
        [UIView animateWithDuration:RESET_ANIMATION_TIME animations:^{
            self.center = self.originalCenter;
            self.transform = CGAffineTransformMakeRotation(0);
            self.yesButton.transform = CGAffineTransformMakeScale(1, 1);
            self.noButton.transform = CGAffineTransformMakeScale(1, 1);
        }];
        [self.delegate moveBackCards];
    }

}

-(void)rightAction:(CGPoint)velocity{
    CGFloat distanceX = [[UIScreen mainScreen] bounds].size.width + CARD_WIDTH + self.originalCenter.x;//横向移动距离
    CGFloat distanceY = distanceX * yFromCenter / xFromCenter;//纵向移动距离
    CGPoint finishPoint = CGPointMake(self.originalCenter.x + distanceX, self.originalCenter.y + distanceY);//目标center点
    CGFloat vel = sqrt(pow(velocity.x, 2) + pow(velocity.y, 2));//滑动手势横纵合速度
    CGFloat displace = sqrt(pow(distanceX - xFromCenter, 2) + pow(distanceY - yFromCenter, 2));//需要动画完成的剩下距离
    CGFloat duration = fabs(displace/vel);//动画时间
    if (duration > 0.6) {
        duration = 0.6;
    }else if (duration < 0.3){
        duration = 0.3;
    }

    [UIView animateWithDuration:duration animations:^{
        self.yesButton.transform = CGAffineTransformMakeScale(1.5, 1.5);
        self.center = finishPoint;
        self.transform = CGAffineTransformMakeRotation(ROTATION_ANGLE);
    } completion:^(BOOL finished) {
        self.yesButton.transform = CGAffineTransformMakeScale(1, 1);
        [self.delegate swipCard:self Direction:YES];
    }];
    [self.delegate adjustOtherCards];
}

-(void)leftAction:(CGPoint)velocity{
    //横向移动距离
    CGFloat distanceX = -CARD_WIDTH - self.originalPoint.x;
    //纵向移动距离
    CGFloat distanceY = distanceX * yFromCenter/xFromCenter;
    //目标center
    CGPoint finishPoint = CGPointMake(self.originalPoint.x + distanceX, self.originalPoint.y + distanceY);
    CGFloat vel = sqrtf(pow(velocity.x, 2) + pow(velocity.y, 2));
    CGFloat displace = sqrtf(pow(distanceX - xFromCenter, 2) + pow(distanceY - yFromCenter, 2));
    CGFloat duration = fabs(displace/vel);
    if (duration > 0.6) {
        duration = 0.6;
    }else if (duration < 0.3){
        duration = 0.3;
    }
    [UIView animateWithDuration:duration animations:^{
        self.noButton.transform = CGAffineTransformMakeScale(1.5, 1.5);
        self.center = finishPoint;
        self.transform = CGAffineTransformMakeRotation(-ROTATION_ANGLE);
    } completion:^(BOOL finished) {
        self.noButton.transform = CGAffineTransformMakeScale(1, 1);
        [self.delegate swipCard:self Direction:NO];

    }];
    [self.delegate adjustOtherCards];

}

-(void)rightButtonClickAction{
    if (!self.canPan) {
        return;
    }
    CGPoint finishPoint = CGPointMake([[UIScreen mainScreen] bounds].size.width + CARD_WIDTH * 2/3, 2 * PAN_DISTANCE + self.frame.origin.y);
    [UIView animateWithDuration:CLICK_ANIMATION_TIME animations:^{
        self.yesButton.transform = CGAffineTransformMakeScale(1.5, 1.5);
        self.center = finishPoint;
        self.transform = CGAffineTransformMakeRotation(-ROTATION_ANGLE);
    } completion:^(BOOL finished) {
        self.yesButton.transform = CGAffineTransformMakeScale(1, 1);
        [self.delegate swipCard:self Direction:YES];

    }];

    [self.delegate adjustOtherCards];



}

-(void)leftButtonClickAction{
    if (!self.canPan) {
        return;
    }
    CGPoint finishPoint =CGPointMake(-CARD_WIDTH * 2/3, 2 * PAN_DISTANCE + self.frame.origin.y);
    [UIView animateWithDuration:CLICK_ANIMATION_TIME animations:^{
        self.noButton.transform = CGAffineTransformMakeScale(1.5, 1.5);
        self.center = finishPoint;
        self.transform = CGAffineTransformMakeRotation(-ROTATION_ANGLE);
    } completion:^(BOOL finished) {
        self.noButton.transform = CGAffineTransformMakeScale(1, 1);
        [self.delegate swipCard:self Direction:NO];
    }];
    [self.delegate adjustOtherCards];


}

@end

页面布局使用

#import "ViewController.h"
#import "DragCardView.h"
#import "CardHeader.h"

#define CARD_NUM 5
#define MIN_INFO_NUM 10
#define CARD_SCALE 0.95

@interface ViewController ()<DragCardViewDelegate>

@property (nonatomic, strong) NSMutableArray *allCards;

@property (nonatomic, assign) CGPoint lastCardCenter;
@property (nonatomic, assign) CGAffineTransform lastCardTTransform;
@property (nonatomic, strong) NSMutableArray *sourceObject;
@property (nonatomic, assign) NSInteger page;
@property (nonatomic, strong) UIButton *likeBtn;
@property (nonatomic, strong) UIButton *disLikeBtn;

@property (nonatomic, assign) BOOL flag;


@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"卡片";
    self.allCards = [NSMutableArray array];
    self.sourceObject = [NSMutableArray array];
    self.page = 0;

    [self addControls];
    [self addCards];
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [self requestSourceData:YES];
    });

}

#pragma mark--添加控件
-(void)addControls{
    UIButton *reloadBtn = [UIButton buttonWithType:UIButtonTypeSystem];
    [reloadBtn setTitle:@"重置" forState:UIControlStateNormal];
    reloadBtn.frame = CGRectMake(self.view.center.x - 25, self.view.frame.size.height - 60, 50, 30);
    [reloadBtn addTarget:self action:@selector(refreshAllCards) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:reloadBtn];

    self.disLikeBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    self.disLikeBtn.frame = CGRectMake(lengthFit(80), CARD_HEIGHT + lengthFit(100), 60, 60);
    [self.disLikeBtn setImage:[UIImage imageNamed:@"dislikeBtn"] forState:UIControlStateNormal];
    [self.disLikeBtn addTarget:self action:@selector(leftButtonClickAction) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:self.disLikeBtn];


    self.likeBtn = [UIButton buttonWithType: UIButtonTypeCustom];
    self.likeBtn.frame = CGRectMake(self.view.frame.size.width - lengthFit(80) - 60, CARD_HEIGHT + lengthFit(100), 60, 60);
    [self.likeBtn setImage:[UIImage imageNamed:@"likeBtn"] forState:UIControlStateNormal];
    [self.likeBtn addTarget:self action:@selector(rightButtonClickAction) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:self.likeBtn];
}

#pragma mark--刷新所有卡片
-(void)refreshAllCards{
    self.sourceObject = [@[] mutableCopy];
    self.page = 0;
    for (int i = 0; i <_allCards.count; i ++) {
        DragCardView *card = self.allCards[i];
        CGPoint finishPoint = CGPointMake(-CARD_WIDTH, 2 * PAN_DISTANCE + card.frame.origin.y);
       [UIView animateKeyframesWithDuration:0.5 delay:0.06 * i options:UIViewKeyframeAnimationOptionCalculationModeLinear animations:^{
           card.center = finishPoint;
           card.transform = CGAffineTransformMakeRotation(-ROTATION_ANGLE);
       } completion:^(BOOL finished) {

           card.yesButton.transform = CGAffineTransformMakeScale(1, 1);
           card.transform = CGAffineTransformMakeRotation(ROTATION_ANGLE);
           card.hidden = YES;
           card.center = CGPointMake([[UIScreen mainScreen] bounds].size.width + CARD_WIDTH, self.view.center.y);
           if (i == _allCards.count - 1) {
               [self requestSourceData:YES];
           }
       }];


    }
}

#pragma mark--请求数据
-(void)requestSourceData:(BOOL)needLoad{
        /** 在此添加网络数据请求代码 */
    NSMutableArray *objectArray = [@[] mutableCopy];
    for (int i = 1; i <= 10; i ++) {
        [objectArray addObject:@{@"number":[NSString stringWithFormat:@"%ld",self.page * 10 + i],@"image":[NSString stringWithFormat:@"%d.jpeg",i]}];
    }
    [self.sourceObject addObjectsFromArray:objectArray];
    self.page ++;

    //如果只是补充数据则不需要重新load卡片,而若是刷新卡片组则需要重新load
    if (needLoad) {
        [self loadAllCards];
    }

}
#pragma mark--重新加载卡片
-(void)loadAllCards{
    for (int i = 0; i < self.allCards.count; i ++) {
        DragCardView *draggableView = self.allCards[i];
        if ([self.sourceObject firstObject]) {
            draggableView.infoDict = [self.sourceObject firstObject];
            [self.sourceObject removeObjectAtIndex:0];
            [draggableView layoutSubviews];
            draggableView.hidden = NO;
        }else{
            draggableView.hidden = YES;//如果没有数据则隐藏卡片
        }
    }

    for (int i = 0; i < _allCards.count; i ++) {
        DragCardView *draggableView = self.allCards[i];
        CGPoint finishPoint = CGPointMake(self.view.center.x, CARD_HEIGHT/2 + 40);
        [UIView animateKeyframesWithDuration:0.5 delay:0.06 * i options:UIViewKeyframeAnimationOptionCalculationModeLinear animations:^{
            draggableView.center = finishPoint;
            draggableView.transform = CGAffineTransformMakeRotation(0);
            if (i >0&&i <CARD_NUM - 1) {
                DragCardView *preDraggableView = [_allCards objectAtIndex:i - 1];
                draggableView.transform = CGAffineTransformScale(draggableView.transform, pow(CARD_SCALE, i), pow(CARD_SCALE, i));
                CGRect frame = draggableView.frame;
                frame.origin.y = preDraggableView.frame.origin.y + (preDraggableView.frame.size.height - frame.size.height) + 10 * pow(0.7, i);
                draggableView.frame = frame;

            }else if (i==CARD_NUM - 1){
                DragCardView *preDraggableView = [_allCards objectAtIndex:i -1];
                draggableView.transform = preDraggableView.transform;
                draggableView.frame = preDraggableView.frame;

            }

            draggableView.originalCenter = draggableView.center;
            draggableView.originalTransform = draggableView.transform;

            if (i==CARD_NUM - 1) {
                self.lastCardCenter = draggableView.center;
                self.lastCardTTransform = draggableView.transform;
            }


        } completion:^(BOOL finished) {

        }];

    }


}

#pragma mark--首次添加卡片
-(void)addCards{
    for (int i = 0; i < CARD_NUM; i ++) {
        DragCardView *draggableView = [[DragCardView alloc] initWithFrame:CGRectMake([[UIScreen mainScreen] bounds].size.width + CARD_WIDTH, self.view.center.y - CARD_HEIGHT/2, CARD_WIDTH, CARD_HEIGHT)];
        if (i > 0 && i <CARD_NUM - 1) {
            draggableView.transform = CGAffineTransformScale(draggableView.transform, pow(CARD_SCALE, i), pow(CARD_SCALE, i));
        }else if (i==CARD_NUM -1){
            draggableView.transform = CGAffineTransformScale(draggableView.transform, pow(CARD_SCALE, i-1), pow(CARD_SCALE, i-1));
        }
        draggableView.transform = CGAffineTransformMakeRotation(ROTATION_ANGLE);
        draggableView.delegate = self;
        [_allCards addObject:draggableView];
        if (i==0) {
            draggableView.canPan = YES;
        }else{
            draggableView.canPan = NO;
        }

    }
    for (int i = (int)CARD_NUM - 1; i >=0; i--) {
        [self.view addSubview:_allCards[i]];
    }

}

#pragma mark--滑动后续操作
-(void)swipCard:(DragCardView *)cardView Direction:(BOOL)isRight{
    if (isRight) {
        [self like:cardView.infoDict];
    }else{
        [self unlike:cardView.infoDict];
    }
    [_allCards removeObject:cardView];
    cardView.transform = self.lastCardTTransform;
    cardView.center = self.lastCardCenter;
    cardView.canPan = NO;
    [self.view insertSubview:cardView belowSubview:[_allCards lastObject]];
    [_allCards addObject:cardView];
    if ([self.sourceObject firstObject] != nil) {

        cardView.infoDict = [self.sourceObject firstObject];
        [self.sourceObject removeObjectAtIndex:0];
        [cardView layoutSubviews];
        if (self.sourceObject.count <MIN_INFO_NUM) {
            [self requestSourceData:NO];
        }

    }else{
        cardView.hidden = YES;//如果没有数据则隐藏卡片
    }

    for (int i = 0; i <CARD_NUM; i ++) {
        DragCardView *draggableView = [_allCards objectAtIndex:i];
        draggableView.originalCenter = draggableView.center;
        draggableView.originalTransform = draggableView.transform;
        if (i==0) {
            draggableView.canPan = YES;
        }
    }

}

#pragma mark--滑动中更改其他卡片位置
-(void)moveCards:(CGFloat)distance{
    if (fabs(distance)<= PAN_DISTANCE) {
        for (int i = 1; i <CARD_NUM - 1; i ++) {
            DragCardView *draggableView = _allCards[i];
            DragCardView *preDraggableView = [_allCards objectAtIndex:i-1];
            draggableView.transform = CGAffineTransformScale(draggableView.originalTransform, 1+(1/CARD_SCALE -1)*fabs(distance/PAN_DISTANCE)* 0.6, 1+ (1/CARD_SCALE -1)*fabs(distance/PAN_DISTANCE)*0.6);//0.6为缩减因数,使放大速度始终小于卡片移动速度的
            CGPoint center = draggableView.center;
            center.y = draggableView.originalCenter.y - (draggableView.originalCenter.y - preDraggableView.originalCenter.y)*fabs(distance/PAN_DISTANCE)*0.6;//此处的0.6同上
            draggableView.center = center;
        }
    }

    if (distance >0) {
        self.likeBtn.transform = CGAffineTransformMakeScale(1 + 0.1*fabs(distance/PAN_DISTANCE), 1 + 0.1*fabs(distance/PAN_DISTANCE));
    }else{
        self.disLikeBtn.transform = CGAffineTransformMakeScale(1 + 0.1*fabs(distance/PAN_DISTANCE), 1+0.1*fabs(distance/PAN_DISTANCE));
    }

}


#pragma mark--滑动终止后复原其他卡片
-(void)moveBackCards{
    for (int i =1; i < CARD_NUM - 1; i ++) {
        DragCardView *draggableView = _allCards[i];
        [UIView animateWithDuration:RESET_ANIMATION_TIME animations:^{
            draggableView.transform = draggableView.originalTransform;
            draggableView.center = draggableView.originalCenter;
        }];

    }
}


#pragma mark--滑动后调整其他卡片位置
-(void)adjustOtherCards{
    [UIView animateWithDuration:0.2 animations:^{
        for (int i = 1; i < CARD_NUM - 1; i ++) {
            DragCardView *draggableView = _allCards[i];
            DragCardView *preDraggableView = [_allCards objectAtIndex:i-1];
            draggableView.transform = preDraggableView.originalTransform;
            draggableView.center = preDraggableView.originalCenter;
        }
    } completion:^(BOOL finished) {
        self.disLikeBtn.transform = CGAffineTransformMakeScale(1, 1);
        self.likeBtn.transform = CGAffineTransformMakeScale(1, 1);
    }];
}



#pragma nark--like
-(void)like:(NSDictionary *)userInfo{
        /** 在此添加“喜欢”的后续操作 */
    NSLog(@"like:%@",userInfo[@"number"]);
}

#pragma mark--dislike
-(void)unlike:(NSDictionary *)userInfo{
        /** 在此添加“不喜欢”的后续操作 */
    NSLog(@"unlike:%@",userInfo[@"number"]);
}

-(void)rightButtonClickAction{
    if (_flag == YES) {
        return;
    }
    _flag = YES;
    DragCardView *dragView = self.allCards[0];
    CGPoint finishPoint = CGPointMake([[UIScreen mainScreen] bounds].size.width + CARD_WIDTH * 2/3, 2 * PAN_DISTANCE + dragView.frame.origin.y);
    [UIView animateWithDuration:CLICK_ANIMATION_TIME animations:^{
        self.likeBtn.transform = CGAffineTransformMakeScale(1.2, 1.2);
        dragView.center = finishPoint;
        dragView.transform = CGAffineTransformMakeRotation(-ROTATION_ANGLE);
    } completion:^(BOOL finished) {
        self.likeBtn.transform = CGAffineTransformMakeScale(1, 1);
        [self swipCard:dragView Direction:YES];
        _flag = NO;
    }];
    [self adjustOtherCards];
}

-(void)leftButtonClickAction{
    if (_flag == YES) {
        return;
    }

    _flag = YES;
    DragCardView *dragView = self.allCards[0];
    CGPoint finishPoint = CGPointMake(-CARD_WIDTH * 2/3, 2 * PAN_DISTANCE + dragView.frame.origin.y);
    [UIView animateWithDuration:CLICK_ANIMATION_TIME animations:^{
        self.disLikeBtn.transform = CGAffineTransformMakeScale(1.2, 1.2);
        dragView.center = finishPoint;
        dragView.transform = CGAffineTransformMakeRotation(-ROTATION_ANGLE);
    } completion:^(BOOL finished) {
        self.disLikeBtn.transform = CGAffineTransformMakeScale(1, 1);
        [self swipCard:dragView Direction:NO];
        _flag = NO;
    }];
    [self adjustOtherCards];

}

@end

猜你喜欢

转载自blog.csdn.net/qq_33323291/article/details/52727428