源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-02-13 17:29 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:iOS实现萌货猫头鹰登录界面动画
[b]效果如下图.[/b] [img]http://files.jb51.net/file_images/article/201608/20168292219511.gif?20167292231[/img] [b]动画实现核心:[/b] 动画核心的是用到了iOS中[code]UIView[/code]的[code]transform[/code]属性,然后根据尺寸坐标对四张图片进行平移以及缩放. 具体的图层结构如图所示: [img]http://files.jb51.net/file_images/article/201608/20168292327856.png?20167292341[/img] [b]注意点:[/b]     1.图中只露出两个点的手臂,是不需要裁剪的,有部分是能遮挡粉色view的.所以可以将它们与头部图片放在一个view中.     2.而动画中的手臂只露出粉色文本框以上的部分的方法,是将两个手臂图片添加到一个另外一个View中,然后设置这个View的属性为超过UIView的部分自动裁剪. [b]核心代码:[/b]
 //相对于初始位置的平移
 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);
[b]步骤1:[/b] [b]主要视图在storyBorad中创建[/b] 1.将两个小点手臂图片和头部图片放到一个view中.  [img]http://files.jb51.net/file_images/article/201608/20168292454798.png?2016729254[/img] 2.将那两个长的手臂放到一个view中,然后将这个view堆叠到1中的view上,位置要对应,手正好能蒙住眼睛,这个view的属性要设置为超出部分自动裁剪.view的颜色为透明. [img]http://files.jb51.net/file_images/article/201608/20168292528903.png?20167292537[/img] 3.最后的视图效果是这样的. [img]http://files.jb51.net/file_images/article/201608/20168292558754.png?2016729267[/img] [b]步骤2:[/b] 考虑到代码的封装性,我们可以这整个View关联到一个[code]UIView[/code]的类中. [b]1.对图中的4张图片拖线到刚刚新建的类中[/b],[b]建立4个[/b][code]UIImageView[/code][b]属性.对一整个view进行拖线[/b]
//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;
[b]2.在awakeFromNib方法中对控件进行初始化[/b] 获得手臂图片相对于一整个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);
[b]添加四个属性[/b]
@property (nonatomic,assign)CGFloat leftArmX;
@property (nonatomic,assign)CGFloat leftArmY;
@property (nonatomic,assign)CGFloat rightArmX;
@property (nonatomic,assign)CGFloat rightArmY;
[b]3.猫头鹰的状态有两种,蒙住眼以及不蒙眼的[/b]
//方便调用,样式:[self.loginAnim startAnim:YES];
- (void)startAnim:(BOOL)isCoverd
{
  if (isCoverd) {
    //动画持续时间0.25秒
    [UIView animateWithDuration:0.25 animations:^{
      // 蒙眼 
    }];
  }else
  {
    [UIView animateWithDuration:0.25 animations:^{
      //不蒙眼,也就是初始状态
    }];
  }
}
[b]1.蒙眼状态[/b]
      //手臂偏移到蒙住眼睛的位置
      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);
[b]2.不蒙眼[/b]
      //两个手臂回到初始化状态
      self.rightArm.transform = CGAffineTransformMakeTranslation(self.rightArmX, self.rightArmY);
      self.leftArm.transform = CGAffineTransformMakeTranslation(self.leftArmX, self.leftArmY);
      //两个小圆点回到默认设置
      self.rightHand.transform = CGAffineTransformIdentity;
      self.leftHand.transform = CGAffineTransformIdentity;
至此本文介绍的萌版猫头鹰登录动画就完成了,是不是很有趣呢?感兴趣的小伙伴们快快动手实现起来吧。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部