动画其实在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];
}];
}];
}];
}