美文网首页iOS工作系列iOS开发ios 进阶
萌货猫头鹰登录界面动画iOS实现分析

萌货猫头鹰登录界面动画iOS实现分析

作者: Dariel | 来源:发表于2015-09-22 00:01 被阅读2914次

动画效果仿自国外网站readme.io的登录界面,超萌可爱的猫头鹰,具体效果如下图所示.


动画实现核心:

动画核心的是用到了iOS中UIView的transform属性,然后根据尺寸坐标对四张图片进行平移以及缩放.
具体的图层结构如图所示:

注意点:

  • 图中只露出两个点的手臂,是不需要裁剪的,有部分是能遮挡粉色view的.所以可以将它们与头部图片放在一个view中.
  • 而动画中的手臂只露出粉色文本框以上的部分的方法,是将两个手臂图片添加到一个另外一个View中,然后设置这个View的属性为超过UIView的部分自动裁剪.

核心代码:

 //相对于初始位置的平移
 self.greenView.transform = CGAffineTransformMakeTranslation(100, 0);
 //相对于上次位置的平移
 self.greenView.transform = CGAffineTransformTranslate(self.greenView.transform, 100, 0);
  //相对于初始尺寸的缩放,2是倍数
 self.greenView.transform = CGAffineTransformMakeScale(2, 2);
  //相对于上次的尺寸缩放0.5倍
 self.greenView.transform = CGAffineTransformScale(self.greenView.transform, 0.5, 0.5);

步骤1:

主要视图在storyBorad中创建
1.将两个小点手臂图片和头部图片放到一个view中.



2.将那两个长的手臂放到一个view中,然后将这个view堆叠到1中的view上,位置要对应,手正好能蒙住眼睛,这个view的属性要设置为超出部分自动裁剪.view的颜色为透明.

3.最后的视图效果是这样的.


步骤2:

考虑到代码的封装性,我们可以这整个View关联到一个UIView的类中.
1.对图中的4张图片拖线到刚刚新建的类中,建立4个UIImageView属性.对一整个view进行拖线

//Arm是长长的手臂
@property (weak, nonatomic) IBOutlet UIImageView *leftArm;
@property (weak, nonatomic) IBOutlet UIImageView *rightArm;
//Hand是那两个小圆点
@property (weak, nonatomic) IBOutlet UIImageView *leftHand;
@property (weak, nonatomic) IBOutlet UIImageView *rightHand;
//包含5张图片的整个view
@property (weak, nonatomic) IBOutlet UIView *viewFrame;

2.在awakeFromNib方法中对控件进行初始化
获得手臂图片相对于一整个view的位置,以及整个view的宽高

    //当前左手的位置
    CGFloat leftArmX = self.leftArm.frame.origin.x;
    CGFloat leftArmY = self.leftArm.frame.origin.y;
    //当前右手的位置
    CGFloat rightArmX = self.rightArm.frame.origin.x;
    CGFloat rightArmY = self.rightArm.frame.origin.y;
    //viewFrame的宽高
    CGFloat viewFrameH = self.viewFrame.frame.size.height;
    CGFloat viewFrameW = self.viewFrame.frame.size.width;

根据以上数据计算得出,在初始状态手臂的位置(注意:设置图片时手臂是蒙住眼睛的,初始状态手臂是看不到的,只有两个小点(hand))

    //为了便于以后的计算,将左右手的初始位置设置为属性
    //15为根据图片显示的位置作适当调整的尺寸
    self.leftArmX = -leftArmX - 15;
    self.leftArmY = viewFrameH - leftArmY;
    self.rightArmX = viewFrameW - rightArmX - self.rightArm.frame.size.width +15;
    self.rightArmY = viewFrameH - rightArmY;
    //根据计算出的左右手的初始位置,设置初始位置左右手的偏移量
    self.rightArm.transform = CGAffineTransformMakeTranslation(self.rightArmX, self.rightArmY);
    self.leftArm.transform = CGAffineTransformMakeTranslation(self.leftArmX, self.leftArmY);

添加四个属性

@property (nonatomic,assign)CGFloat leftArmX;
@property (nonatomic,assign)CGFloat leftArmY;
@property (nonatomic,assign)CGFloat rightArmX;
@property (nonatomic,assign)CGFloat rightArmY;

3.猫头鹰的状态有两种,蒙住眼以及不蒙眼的

//方便调用,样式:[self.loginAnim startAnim:YES];
- (void)startAnim:(BOOL)isCoverd
{
    if (isCoverd) {
        //动画持续时间0.25秒
        [UIView animateWithDuration:0.25 animations:^{
            // 蒙眼  
        }];
    }else
    {
        [UIView animateWithDuration:0.25 animations:^{
           //不蒙眼,也就是初始状态
        }];
    }
}

1.蒙眼状态

            //手臂偏移到蒙住眼睛的位置
            self.rightArm.transform = CGAffineTransformTranslate(self.rightArm.transform, -self.rightArmX, -self.rightArmY);
            self.leftArm.transform = CGAffineTransformTranslate(self.leftArm.transform, -self.leftArmX, -self.leftArmY);
            //小圆点移动到眼睛的位置,30为根据图片显示位置手动调整的尺寸
            CGAffineTransform rightHand = CGAffineTransformTranslate(self.rightArm.transform, -self.rightArmX, -self.rightArmY+30);
            CGAffineTransform leftHand =  CGAffineTransformTranslate(self.leftArm.transform, -self.leftArmX, -self.leftArmY+30);
            //小圆点在移动的过程中逐渐减小
            self.rightHand.transform = CGAffineTransformScale(rightHand, 0.01, 0.01);
            self.leftHand.transform = CGAffineTransformScale(leftHand, 0.01, 0.01);

2.不蒙眼

            //两个手臂回到初始化状态
            self.rightArm.transform = CGAffineTransformMakeTranslation(self.rightArmX, self.rightArmY);
            self.leftArm.transform = CGAffineTransformMakeTranslation(self.leftArmX, self.leftArmY);
            //两个小圆点回到默认设置
            self.rightHand.transform = CGAffineTransformIdentity;
            self.leftHand.transform = CGAffineTransformIdentity;

至此萌版猫头鹰登录动画就完成了.

相关文章

  • 萌货猫头鹰登录界面动画iOS实现分析

    动画效果仿自国外网站readme.io的登录界面,超萌可爱的猫头鹰,具体效果如下图所示. 动画实现核心: 动画核心...

  • 酷炫登录动画效果

    登录效果: 登录界面背景使用CAGradientLayer实现,动画主要使用CAShapeLayer和UIBezi...

  • 登录注册UI ---- 1

    转载自 iOS登录界面和注册界面 一、登录和注册界面实现效果图: 一、实现原理 1、输入框的实现原理:把两个无边框...

  • iOS开发——登录页面动画、转场动画

    iOS开发——登录页面动画、转场动画 iOS开发——登录页面动画、转场动画

  • 登录界面效果图

    1.1用户登录界面 1.2收银员登录界面 1.3库管员登录界面 2.登录界面实现的功能描述 可实现不同用户类型的自...

  • 2018-10-14

    一.开始界面 二.登录界面的实现的功能效果1.能够成功连接数据库,能登录界面,实现登录验证功能;2.该登录界面可以...

  • iOS用户协议界面实现方案(YYText实现部分文字的高亮点击)

    iOS用户协议界面实现方案(YYText实现部分文字的高亮点击) 通常情况下注册、登录界面下方都会包含用户协议和隐...

  • ViewPager欢迎界面到引导界面的的实现之一

    ViewPager欢迎界面到引导界面的的实现 打开软件,弹出一个动画,动画结束到引导界面 先来实现欢迎界面动画的实...

  • 2018-10-21

    智能商超登录 1.登录界面 2. 登录界面实现的功能描述 实现不同用户类型登陆情况和密码核对 3.登录界面各控件的...

  • 智慧商超系统

    智能商超登录 1.登录界面 2. 登录界面实现的功能描述 实现不同用户类型登陆。 3.登录界面各控件的参数设置 控...

网友评论

  • 天空总是很晴朗:可否发个demo,照你写的,实在弄不出来
  • 箪食豆羹:效果好棒啊! :blush: 希望分享Demo! xjh_28@163.com 谢谢作者~~ :grin:
  • 8b5418b33529:虽然只是个登录界面,但加了这个小动画,就觉得是和传统完全不一样的体验。
    输入密码的时候,猫头鹰把自己的眼睛蒙了起来,暗示我们的软件不会透露客户信息,站在用户的角度,很不错的idea
    Dariel:@我是一只善良的dog :smile:
  • kelvin943:同求Demo 和素材 411121735@qq.com
  • 郑明明:不错的效果
  • Killer_HG:跪求Demo,谢谢大神,邮箱1223541408@qq.com
  • jackiehoo:以前看到过这个界面,没有仔细分析。只是觉得有趣。向作者学习,要有探究和分析学习的能力啊。
  • Fe_Zn:效果很赞!希望分享代码或素材!531337622@qq.com 谢谢你的分享!
  • 杏仁丶: :relieved: 很萌的效果,可以发个demo或素材吗?747521638@qq.com以供研究或照着做一下
  • AE86:不错!

本文标题:萌货猫头鹰登录界面动画iOS实现分析

本文链接:https://www.haomeiwen.com/subject/wjdicttx.html