服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - IOS - iOS实现萌货猫头鹰登录界面动画

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

2021-01-22 14:58Dariel在杭州 IOS

本文介绍的动画效果仿自国外网站readme.io的登录界面,超萌可爱的猫头鹰,感兴趣的朋友们可以参考学习。

效果如下图.

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

动画实现核心:

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

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

注意点:

    1.图中只露出两个点的手臂,是不需要裁剪的,有部分是能遮挡粉色view的.所以可以将它们与头部图片放在一个view中.

    2.而动画中的手臂只露出粉色文本框以上的部分的方法,是将两个手臂图片添加到一个另外一个view中,然后设置这个view的属性为超过uiview的部分自动裁剪.

核心代码:

?
1
2
3
4
5
6
7
8
//相对于初始位置的平移
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中.

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

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

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


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

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

步骤2:

考虑到代码的封装性,我们可以这整个view关联到一个uiview的类中.

1.对图中的4张图片拖线到刚刚新建的类中,建立4个uiimageview属性.对一整个view进行拖线

?
1
2
3
4
5
6
7
8
//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的宽高

?
1
2
3
4
5
6
7
8
9
//当前左手的位置
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))

?
1
2
3
4
5
6
7
8
9
//为了便于以后的计算,将左右手的初始位置设置为属性
//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);

添加四个属性

?
1
2
3
4
@property (nonatomic,assign)cgfloat leftarmx;
@property (nonatomic,assign)cgfloat leftarmy;
@property (nonatomic,assign)cgfloat rightarmx;
@property (nonatomic,assign)cgfloat rightarmy;

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//方便调用,样式:[self.loginanim startanim:yes];
- (void)startanim:(bool)iscoverd
{
  if (iscoverd) {
    //动画持续时间0.25秒
    [uiview animatewithduration:0.25 animations:^{
      // 蒙眼
    }];
  }else
  {
    [uiview animatewithduration:0.25 animations:^{
      //不蒙眼,也就是初始状态
    }];
  }
}

1.蒙眼状态

?
1
2
3
4
5
6
7
8
9
//手臂偏移到蒙住眼睛的位置
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.不蒙眼

?
1
2
3
4
5
6
//两个手臂回到初始化状态
self.rightarm.transform = cgaffinetransformmaketranslation(self.rightarmx, self.rightarmy);
self.leftarm.transform = cgaffinetransformmaketranslation(self.leftarmx, self.leftarmy);
//两个小圆点回到默认设置
self.righthand.transform = cgaffinetransformidentity;
self.lefthand.transform = cgaffinetransformidentity;

至此本文介绍的萌版猫头鹰登录动画就完成了,是不是很有趣呢?感兴趣的小伙伴们快快动手实现起来吧。

原文链接:http://www.jianshu.com/p/2e2426e861d6

延伸 · 阅读

精彩推荐
  • IOSiOS布局渲染之UIView方法的调用时机详解

    iOS布局渲染之UIView方法的调用时机详解

    在你刚开始开发 iOS 应用时,最难避免或者是调试的就是和布局相关的问题,下面这篇文章主要给大家介绍了关于iOS布局渲染之UIView方法调用时机的相关资料...

    windtersharp7642021-05-04
  • IOSIOS 屏幕适配方案实现缩放window的示例代码

    IOS 屏幕适配方案实现缩放window的示例代码

    这篇文章主要介绍了IOS 屏幕适配方案实现缩放window的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    xiari5772021-06-01
  • IOSiOS通过逆向理解Block的内存模型

    iOS通过逆向理解Block的内存模型

    自从对 iOS 的逆向初窥门径后,我也经常通过它来分析一些比较大的应用,参考一下这些应用中某些功能的实现。这个探索的过程乐趣多多,不仅能满足自...

    Swiftyper12832021-03-03
  • IOSiOS 雷达效果实例详解

    iOS 雷达效果实例详解

    这篇文章主要介绍了iOS 雷达效果实例详解的相关资料,需要的朋友可以参考下...

    SimpleWorld11022021-01-28
  • IOS解析iOS开发中的FirstResponder第一响应对象

    解析iOS开发中的FirstResponder第一响应对象

    这篇文章主要介绍了解析iOS开发中的FirstResponder第一响应对象,包括View的FirstResponder的释放问题,需要的朋友可以参考下...

    一片枫叶4662020-12-25
  • IOS关于iOS自适应cell行高的那些事儿

    关于iOS自适应cell行高的那些事儿

    这篇文章主要给大家介绍了关于iOS自适应cell行高的那些事儿,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    daisy6092021-05-17
  • IOSIOS开发之字典转字符串的实例详解

    IOS开发之字典转字符串的实例详解

    这篇文章主要介绍了IOS开发之字典转字符串的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握这样的方法,需要的朋友可以参考下...

    苦练内功5832021-04-01
  • IOSiOS中tableview 两级cell的展开与收回的示例代码

    iOS中tableview 两级cell的展开与收回的示例代码

    本篇文章主要介绍了iOS中tableview 两级cell的展开与收回的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    J_Kang3862021-04-22