时间:2021-05-19
效果如下图.
动画实现核心:
动画核心的是用到了iOS中UIView的transform属性,然后根据尺寸坐标对四张图片进行平移以及缩放.
具体的图层结构如图所示:
注意点:
1.图中只露出两个点的手臂,是不需要裁剪的,有部分是能遮挡粉色view的.所以可以将它们与头部图片放在一个view中.
2.而动画中的手臂只露出粉色文本框以上的部分的方法,是将两个手臂图片添加到一个另外一个View中,然后设置这个View的属性为超过UIView的部分自动裁剪.
核心代码:
步骤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;至此本文介绍的萌版猫头鹰登录动画就完成了,是不是很有趣呢?感兴趣的小伙伴们快快动手实现起来吧。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
基于麒麟810移动平台DSP强大的处理能力和荣耀“猫头鹰”的软件算法,荣耀9xpro的超级夜景模式可以带你清晰捕捉夜色之美。而夜拍中防抖
资料来源:中华商业信息中心,中信证券研究部资料来源:中华商业信息中心,中信证券研究部来源:猫头鹰研究所整理国内品牌日渐崛起生活方式类店铺成新一代标准李宁拉夏贝尔
中国医师协会睡眠医学专业委员发布的《2018中国睡眠指数》报告显示,3/4的"90后"晚上23点以后入睡,有1/3的年轻人晚于凌晨1点入睡,晚睡晚起的"猫头鹰型
蓝魔W41是一款在2013年上市的大小为9.4英寸的一款平板电脑,有着炬力猫头鹰OWL系列处理器,1G内存,16G存储空间和双摄像头,很受欢迎,但是在使用的
ios动画实例详解ios动画的实现方式多种多样,这里就只记录一下beginanimations:context。在你调用beginanimations:cont