ios开发之UIView动画效果实现二

先说明几个基本的概念,方便理解后面的函数。

 属性变化: 可以实现动画效果的属性包括位置(frame, bound), 对齐关系,透明度,背景色,内容拉伸,和transform(这个就多了,下面讲) 

timing curve: 时间曲线,以时间作为横轴,其他值(这里就是指需要变化的属性)作为纵轴。在整个动画持续时间内的函数曲线。
    ease in/ease out: 慢进/慢出,结合上面的时间曲线的概念,就是在动画开始/或是结束的时候,属性变化会减慢,看下面这个图:是ease in ease out 也是默认的动画效果(不是很好,网上随便找的)
    liner: 线性变化,这个不讲了,时间变化曲线一共就这两种。默认是EaseInEaseOut,无疑EaseInEaseOut的效果会更加平滑,但是负荷也大些,不过一般问题不大。
    fade in /fade out: 淡入, 淡出,是一种动画效果,就是逐渐消失,逐渐出现这种东西。
    讲具体的函数前,先举个例子先,
代码 
[UIView beginAnimations:@"ToggleViews" context:nil];

[UIView setAnimationDuration:1.0];

[UIView setAnimationCurve:UIViewAnimationEaseInOut];

// Make the animatable changes.
myView1.alpha = 0.0;
myView2.alpha = 1.0;

// Commit the changes and perform the animation.

[UIView commitAnimations];
    这段代码就可以实现一个漂亮的淡入淡出的切换了,你所要做的,就是用begin/commit函数圈起一块区域,然后把你想做的变化写进去,无论有多少个,他们都会不被立刻执行,知道commit函数提交。简单的说明下函数:
    beginAnimation:context:   两个参数都是给delegate用的,一般nil也没问题,animationID是标示当前动画的名称,在一个代理对应多端动画时用于区别,context是void*,回调函数里常用,用于传递额外的数据,保存上下文,避免使用全局变量。
    setAnimationCurve: 这个上面说过了,默认就是UIViewAnimationCurveEaseInOut,不写也可以。
    setAnimationDuration:  动画的长度,秒作为单位
    再补充个常用的函数,setAnimationRepeatCount: 可以重复动画,有些场景下挺好用的。
    如果需要在动画之前或是动画之后做一些操作的话,可以定义代理(就是两个回调函数)。看下面这个例子,在一个动画后面接了另外一个动画,熟悉代理的使用话,就没啥可讲的了。

代码如下:

- (void)btn1Pressed
{
 [UIView beginAnimations:@"ShowHideView1" context:nil];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
    [UIView setAnimationDuration:3.0];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(showHideDidStop:finished:context:)];
    // Make the animatable changes.
    m_myView1.alpha = 0.0;
    // Commit the changes and perform the animation.
    [UIView commitAnimations]; 
}

- (void)btn2Pressed
{
 [UIView beginAnimations:@"ShowHideView2" context:nil];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
    [UIView setAnimationDuration:3.0];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(showHideDidStop:finished:context:)];
    // Make the animatable changes.
    m_myView2.alpha = 0.0;
    // Commit the changes and perform the animation.
    [UIView commitAnimations]; 
}

- (void)showHideDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
{
  if (animationID == @"ShowHideView1")
 {
  [UIView beginAnimations:@"ShowHideView1" context:nil];
  [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
  [UIView setAnimationDuration:3.0];
  [UIView setAnimationDelay:2.0];
  m_myView1.alpha = 1.0;
  [UIView commitAnimations]; 
 }
 else if (animationID == @"ShowHideView2")
 {
  [UIView beginAnimations:@"ShowHideView2" context:nil];
  [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
  [UIView setAnimationDuration:3.0];
  [UIView setAnimationDelay:2.0];
  m_myView2.alpha = 1.0;
  [UIView commitAnimations]; 
 }
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值