动画效果仿自国外网站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实现分析的更多相关文章

  1. iOS中三种方式实现登录界面播放视频或gif效果

    现在app都做的越来越炫酷,各种动画效果,各种特效很好的提高了用户的体验.很多app在登录界面都使用了动画效果,比如Uber,Keep,QQ等等.这些动画效果基本都是使用gif或者MP4来实现的. 效 ...

  2. [IOS NSUserDefaults]的使用:登陆后不再显示登录界面。

    之前搜了好多地方都没找到实现“登陆后不再显示登录界面,而默认自动登录”的方法. 待我发现有种存储方式叫NSUserDefaults的时候,立马又感觉新技能get了. 简介: NSUserDefault ...

  3. iOS开发UI篇—模仿ipad版QQ空间登录界面

    iOS开发UI篇—模仿ipad版QQ空间登录界面 一.实现和步骤 1.一般ipad项目在命名的时候可以加一个HD,标明为高清版 2.设置项目的文件结构,分为home和login两个部分 3.登陆界面的 ...

  4. 1、IOS开发--iPad之仿制QQ空间(登录界面搭建+登录逻辑实现)

    开始搭建登录界面 登录界面效果图: 相关的图片资源下载百度云备份链接: http://pan.baidu.com/s/1o71cvMU 密码: 2h7e 步骤开始: 设置辅助窗口的位置在下方 快捷键o ...

  5. IOS制作一个漂亮的登录界面

    上图是Facebook的登录界面,看起来很漂亮,eamil框和passwod框合在一起,那么这种效果是怎么做出来的呢?我们都知道输入框用layer属性是可以做成圆角的形式,那么怎么样才能够仅仅只让上边 ...

  6. (NO.00004)iOS实现打砖块游戏(二):实现游戏主界面动画

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 一个内容不错的游戏也要一个好的包装.玩家进入游戏时第一眼看到的是 ...

  7. 【WPF学习笔记】之如何传递第一个登录界面的值到下一个页面显示:动画系列之(三)

    ... ... 承接系列(二) 在之前的登录后台已设置发送到主界面: 在主界面接收传递的值: using System; using System.Collections.Generic; using ...

  8. swift项目实战--微博的未登录界面的实现,和监听未登录界面两个按钮的两种实现方法

    1.未登录界面的实现 微博项目中,用户不登录的话,显示的是未登录的界面.项目中TabBarVC的子控制器都是tableViewVC,所以抽取了父类,让父类判断用户是否登录,决定显示什么样的界面.loa ...

  9. Android 仿 窗帘效果 和 登录界面拖动效果 (Scroller类的应用) 附 2个DEMO及源码

    在android学习中,动作交互是软件中重要的一部分,其中的Scroller就是提供了拖动效果的类,在网上,比如说一些Launcher实现滑屏都可以通过这个类去实现.下面要说的就是上次Scroller ...

随机推荐

  1. Hibernate4.x之入门篇

    Hibernate作为一个优秀的持久化框架.ORM框架.在日常的Java开发中常常用到.本文主要通过一个简单的例子来介绍下Hibernate4.x的入门知识. 新建一个Java项目,并加入Hibern ...

  2. Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作 - Edison Chou

    一.Memcached ClientLib For .Net 首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl.PHP为主. 仅仅memcached网站上列出的语言就有: ...

  3. codeforces 671B Robin Hood 二分

    题意:有n个人,每个人a[i]个物品,进行k次操作,每次都从最富有的人手里拿走一个物品给最穷的人 问k次操作以后,物品最多的人和物品最少的人相差几个物品 分析:如果次数足够多的话,最后的肯定在平均值上 ...

  4. 黑盒测试用例设计方法&理论结合实际 -> 场景法

    一概念 现在的软件几乎都是用事件触发来控制流程的,事件触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果就形成事件流.这种在软件设计方面的思想也可以引入到软件测试中,可以比较生动地描绘出事件 ...

  5. Java内存结构、类的初始化、及对象构造过程

    概述 网上关于该题目的文章已经很多,我觉得把它们几个关联起来讲可能更好理解一下.与其它语言一样,它在执行我们写的程序前要先分配内存空间,以便于存放代码.数据:程序的执行过程其实依然是代码的执行及数据的 ...

  6. 【译】 AWK教程指南 附录D-AWK的内置变量

    因内置变量的个数不多,此处按其相关性分类说明,并未按其字母顺序排列. ARGC ARGC表示命令行上除了选项 -F, -v, -f 及其所对应的参数之外的所有参数的个数.若将"awk程序&q ...

  7. [转载]mac下homebrew的使用

    该文转自:https://www.zybuluo.com/phper/note/87055 mac系统也是基于unix的系统,所以也继承类很多unix的特性,包括软件的编译,安装等.ubuntu下有快 ...

  8. poj1743--Musical Theme(后缀数组)

    题意:求一列数字中走向相同的两个字序列,长度要求大于5 题解:相邻数字求差,原题就变成求相同的长度大于4的子串. [存疑:在保证两个子串不相交时觉得限定条件应该是大于x,但是wa了= = 不是很理解] ...

  9. delphi 调用 webservice (.NET C#版)

    uses XMLIntf, XMLDoc; XML to XTR文件转换 .File-->open打开你要分析的XML文件 .在左边选择你要分析的接点,双击加到中间的转换列表中 .Create- ...

  10. 问题-关于 in []使用过程中报错" Constant expression violates subrange bounds"

    问题现象:在DELPHI中使用户in [] 时参数大于255后,报错,错误如下:Constant expression violates subrange bounds E1012常量表达式超出子界 ...