IOS系列——简单动画-位移和渐隐和旋转

动画其实在IOS中用的也是很多的,而且,就算是在普通的程序中,也用的很多,在这里我也是不断的学习,目前只搞会了一点点。

之前,我在做一个地产展示的小项目,有很多地方都要用到动画,于是不停地找 不停的找,在对动画没什么概念之前,一直以为动画就是用NSTimer不停地定时来实现的,现在才知道,原来原生的还有这样的一些动画来供我们使用

       动画一: 位移

             也是我们用的比较多的。比如我们有时候看到的  点一个按钮。就从边上弹出可一个小框框,其实这个就是位移

首先我先做一个点击之后隐藏到边上去,再点击就显示出来的效果  不过呢,我们可以用button来添加事件响应,在这里我不用button了,就直接用手势来实现

在.m文件里面添加一个方法

- (UIGestureRecognizer *)createTapRecognizerWithSelector:(SEL)selector {
    return [[[UITapGestureRecognizer alloc]initWithTarget:self action:selector]autorelease];
}

然后就可以实现具体代码

先定义一个视图 UIView  *myview;

    myview = [[UIView alloc]initWithFrame:CGRectMake(55,40,210,160)];
    myview.backgroundColor = [UIColor colorWithRed:0.580 green:0.706 blue:0.796 alpha:1.000];
    [self.view addSubview:myiew];
给这个view添加手势以响应点击事件
    [myview addGestureRecognizer:[self createTapRecognizerWithSelector:@selector(yidong)]];
然后就是实现点击事件的处理
- (void)moveMe {
    if (dianji == YES) {
        [UIView animateWithDuration:0.5 animations:^{
            myview.center = CGPointMake(moveMeView.center.x - 140,moveMeView.center.y );
        }];
        dianji = NO;
    }else if(dianji == NO){
        [UIView animateWithDuration:0.5 animations:^{
            myview.center = CGPointMake(moveMeView.center.x + 140,moveMeView.center.y );
        }];
        dianji = YES;
    } }

在这里也解释一下这个  0.5  这个参数的含义,他表示在这么长的时间内(单位是 S ) 来完成这么多的位移变化
不过这样来实现有一个弊端,就是如果位移长度比较大 ,那么就可以明显看到,这位移的过程中,速度不是均匀变化,而是慢慢加快,然后在慢慢变慢  ,暂时还不知道有没有什么属性可以直接控制这个变化,如果有人知道的话,欢迎留言告诉我。  在这里我先说一下我地改变方法,我是结合NSTimer来实现的,  把位移变化量减小,时间减小然后用一个一样时间的NSTimer来实现定时位移 ,就能感觉是匀速移动的

如果不是要点击产生位移,而是加载的时候直接就开始位移,就像是程序里有些开场动画那样的,  可以直接加在viewdidLoad发的方法里面


动画二:渐变

 步骤一样,只是方法有点不同而已,那就只写出方法代码就好了,后面我会把完整地代码上传

- (void)fadeMe {
    [UIView animateWithDuration:1.0 animations:^{
        fadeMeView.alpha = 0.0f;
    }];
}
源码下载 http://download.csdn.net/detail/engandend/6289097


在这里也来说说多张图组合的动画效果实现

UIImageView *gifImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 1024  , 768)];
NSArray *gifArray = [NSArray arrayWithObjects:
 [UIImage imageNamed:@"img/首页动画/vc500/Frame0"],
 [UIImage imageNamed:@"img/首页动画/vc500/Frame8"],
 [UIImage imageNamed:@"img/首页动画/vc500/Frame16"],
 [UIImage imageNamed:@"img/首页动画/vc500/Frame24"],
 [UIImage imageNamed:@"img/首页动画/vc500/Frame32"],
 [UIImage imageNamed:@"img/首页动画/vc500/Frame40"],nil];
 gifImageView.animationImages = gifArray; //动画图片数组
 gifImageView.animationDuration = 3; //执行一次完整动画所需的时长
 gifImageView.animationRepeatCount = 0;  //动画重复次数 0表示无限循环
 [gifImageView startAnimating];
 [viewIndex addSubview:gifImageView];

动画三:旋转
-(void)startAnimation2:(UIImageView *)view{
    CGAffineTransform endAngle = CGAffineTransformMakeRotation(angle * (M_PI / 180.0f));
    [UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
        view.transform = endAngle;
    } completion:^(BOOL finished) {
        angle += 1;
        [self startAnimation2:view];
    }];

}

angle是一个double类型  然后直接调用这个方法就可以实现旋转


动画四:延迟动画

-(void)animation2{
    [UIView animateWithDuration:1 delay:3 options:UIViewAnimationOptionCurveEaseOut animations:^{
        btn3.alpha = 0;
        btn2.alpha = 1;
    } completion:^(BOOL finished){
        [UIView animateWithDuration:1 delay:3 options:UIViewAnimationOptionCurveEaseOut animations:^{
            btn2.alpha = 0;
            btn1.alpha = 1;
        } completion:^(BOOL finished){
            [UIView animateWithDuration:1 delay:3 options:UIViewAnimationOptionCurveEaseOut animations:^{
                btn1.alpha = 0;
                btn3.alpha = 1;
            } completion:^(BOOL finished){
                [self animation2];
            }];
        }];
    }];
}


你可能感兴趣的:(动画)