通讯录之一Transform动画

这里写图片描述

主要使用tramsform对控件做平移和缩放,只要计算好坐标位置即可

动画类

GLoginAnimationView.h

//
//  GLoginAnimationView.h
//  通讯录
//
//  Created by gaocai on 16/7/19.
//  Copyright © 2016年 gaocai. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface GLoginAnimationView : UIView

/**
 *  获取对象静态方法
 *
 *  @return GLoginAnimationView
 */
+ (instancetype)loadAnimationView;

/**
 *  通过BOOL值去判断是遮眼动画还是不遮眼动画
 *
 *  @param isClose YES 为遮眼 NO为不遮眼
 */
- (void)startAnim:(BOOL)isClose;


@end

GLoginAnimationView.m

//
//  GLoginAnimationView.m
//  通讯录
//
//  Created by gaocai on 16/7/19.
//  Copyright © 2016年 gaocai. All rights reserved.
//

#import "GLoginAnimationView.h"

@interface GLoginAnimationView ()
@property (weak, nonatomic) IBOutlet UIImageView *leftArm;
@property (weak, nonatomic) IBOutlet UIImageView *rightArm;
@property (weak, nonatomic) IBOutlet UIImageView *leftHand;
@property (weak, nonatomic) IBOutlet UIImageView *rightHand;

@property (weak, nonatomic) IBOutlet UIView *contentView;

/**
 *  左右两手臂高度是一致的
 */
@property (nonatomic, assign) CGFloat armOffsetY;
/**
 *  记录左边X轴的偏移量
 */
@property (nonatomic, assign) CGFloat leftArmOffsetX;
/**
 *  记录右边X轴的偏移量
 */
@property (nonatomic, assign) CGFloat rightArmOffsetX;

@end

@implementation GLoginAnimationView

/**
 *  做一些初始化操作
 */
- (void)awakeFromNib {

    //初始化手臂位置
    //y轴偏移量
    _armOffsetY = self.bounds.size.height - _leftArm.frame.origin.y;
    //左边手臂x轴偏移量
    _leftArmOffsetX = -_leftArm.frame.origin.x;


    //右手臂x轴的偏移量
    _rightArmOffsetX = _contentView.bounds.size.width - _rightHand.bounds.size.width - _rightArm.frame.origin.x;


    //平移左手臂
    _leftArm.transform = CGAffineTransformMakeTranslation(_leftArmOffsetX, _armOffsetY);

    //平移右手臂
    _rightArm.transform = CGAffineTransformMakeTranslation(_rightArmOffsetX, _armOffsetY);

}


+ (instancetype)loadAnimationView {

    return [[NSBundle mainBundle] loadNibNamed:@"GLoginAnimationView" owner:nil options:nil][0];
}


- (void)startAnim:(BOOL)isClose {

    if (isClose) {//遮眼
        //清空形变(只要控件才可以形变)
        [UIView animateWithDuration:0.25 animations:^{
            //手臂位置还原
            _leftArm.transform = CGAffineTransformIdentity;
            _rightArm.transform = CGAffineTransformIdentity;

            //左手
            _leftHand.transform = CGAffineTransformMakeTranslation(-_leftArmOffsetX, -_armOffsetY + 5);
            _leftHand.transform = CGAffineTransformScale(_leftHand.transform, 0.01, 0.01);
            //右手
            _rightHand.transform = CGAffineTransformMakeTranslation(-_rightArmOffsetX, -_armOffsetY + 5);
            _rightHand.transform = CGAffineTransformScale(_rightHand.transform, 0.01, 0.01);
        }];

    } else {

        [UIView animateWithDuration:0.25 animations:^{
            // 平移左手臂
            _leftArm.transform = CGAffineTransformMakeTranslation(_leftArmOffsetX, _armOffsetY);

            //平移右手臂
            _rightArm.transform = CGAffineTransformMakeTranslation(_rightArmOffsetX, _armOffsetY);

            //手位置还原
            _leftHand.transform = CGAffineTransformIdentity;
            _rightHand.transform = CGAffineTransformIdentity;
        }];

    }

}

@end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值