iOS 动画 旋转 移动简单代码

Advertisement

#import "ViewController.h"

@interface ViewController ()

{

UIImageView *imgView;

BOOL flag;

UIImageView *imgView1;

UIImageView *imgView2;

UIImageView *imgView3;

UIButton *btn1;

UIButton *btn2;

UIButton *btn3;

}

@end

@implementation ViewController

- (void)viewDidLoad

{

[super viewDidLoad];

self.view.backgroundColor = [UIColor whiteColor];

flag = YES;

btn1 = [UIButton buttonWithType:UIButtonTypeCustom];

btn1.frame = CGRectMake(250, 200, 60, 60);

// btn1.hidden = YES;

[self.view addSubview:btn1];

imgView1 = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 60, 60)];

imgView1.layer.cornerRadius = 30;

imgView1.layer.masksToBounds = YES;

imgView1.image = [UIImage imageNamed:@"1.png"];

[btn1 addSubview:imgView1];

btn2 = [UIButton buttonWithType:UIButtonTypeCustom];

btn2.frame = CGRectMake(250, 200, 60, 60);

// btn2.hidden = YES;

[self.view addSubview:btn2];

imgView2 = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 60, 60)];

imgView2.layer.cornerRadius = 30;

imgView2.layer.masksToBounds = YES;

imgView2.image = [UIImage imageNamed:@"2.png"];

[btn2 addSubview:imgView2];

btn3 = [UIButton buttonWithType:UIButtonTypeCustom];

btn3.frame = CGRectMake(250, 200, 60, 60);

// btn3.hidden = YES;

[self.view addSubview:btn3];

imgView3 = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 60, 60)];

imgView3.layer.cornerRadius = 30;

imgView3.layer.masksToBounds = YES;

imgView3.image = [UIImage imageNamed:@"3.png"];

[btn3 addSubview:imgView3];

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

button.frame = CGRectMake(250, 200, 60, 60);

[button addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:button];

imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 60, 60)];

imgView.layer.cornerRadius = 30;

imgView.layer.masksToBounds = YES;

imgView.image = [UIImage imageNamed:@"01.png"];

[button addSubview:imgView];

}

-(void)click:(id)sender

{

if (flag)

{

[UIView animateWithDuration:0.5 animations:^{

imgView.transform = CGAffineTransformMakeRotation(3.14);

// [btn1.layer addAnimation:[self moveX:2.0f X:[NSNumber numberWithFloat:-150.0f]] forKey:nil];

// [btn3.layer addAnimation:[self moveX:1.0f X:[NSNumber numberWithFloat:200.0f]] forKey:nil];

[btn1.layer addAnimation:[self moveX:1.0 X:[NSNumber numberWithFloat:-150.0f] Direction:0] forKey:nil];

[btn2.layer addAnimation:[self moveX:1.0 X:[NSNumber numberWithFloat:-150.0f] Direction:1] forKey:nil];

// [btn3.layer addAnimation:[self moveX:2.0 X:[NSNumber numberWithFloat:0] Direction:2] forKey:nil];

CGPoint point = CGPointMake(-100, -100);

[btn3.layer addAnimation:[self movepoint:point time:1.0] forKey:nil];

// [btn1.layer addAnimation:[self rotation:2.0 degree:0.78 direction:360 repeatCount:1] forKey:nil];

[UIView animateWithDuration:0.5 animations:^{

btn1.transform = CGAffineTransformMakeRotation(M_PI);

btn2.transform = CGAffineTransformMakeRotation(M_PI);

btn3.transform = CGAffineTransformMakeRotation(M_PI);

}];

}];

flag=NO;

}

else

{

[UIView animateWithDuration:0.5 animations:^{

imgView.transform = CGAffineTransformIdentity;

// [btn1.layer addAnimation:[self moveX:2.0f X:[NSNumber numberWithFloat:0.0f]] forKey:nil];

[btn1.layer addAnimation:[self moveX:1.0f X:[NSNumber numberWithFloat:0.0f] Direction:0] forKey:nil];

[btn2.layer addAnimation:[self moveX:1.0f X:[NSNumber numberWithFloat:0.0f] Direction:1] forKey:nil];

CGPoint point = CGPointMake(0, 0);

[btn3.layer addAnimation:[self movepoint:point time:1.0] forKey:nil];

[UIView animateWithDuration:0.5 animations:^{

btn1.transform = CGAffineTransformMakeRotation(0);

btn2.transform = CGAffineTransformMakeRotation(0);

btn3.transform = CGAffineTransformMakeRotation(0);

}];

}];

flag=YES;

}

}

#pragma mark =====横向、纵向移动===========

//横向或者纵向移动

-(CABasicAnimation *)moveX:(float)time X:(NSNumber *)x Direction:(NSUInteger)tag

{

// CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.translation.x"];///.y的话就向下移动。

CABasicAnimation *animation = [[CABasicAnimation alloc] init];///.y的话就向下移动。

if (tag == 0)//横向,改变X

{

animation.keyPath = @"transform.translation.x";

animation.toValue = x;

}

else if (tag == 1)//纵向,改变Y

{

animation.keyPath = @"transform.translation.y";

animation.toValue = x;

}

animation.duration = time;

animation.removedOnCompletion = NO;//yes的话,又返回原位置了。

// animation.repeatCount = MAXFLOAT;

animation.repeatCount = 1;

animation.fillMode = kCAFillModeForwards;

return animation;

}

//移动到某个点

-(CABasicAnimation *)movepoint:(CGPoint )point time:(float)time//点移动

{

CABasicAnimation *animation=[CABasicAnimation animationWithKeyPath:@"transform.translation"];

animation.toValue=[NSValue valueWithCGPoint:point];

animation.removedOnCompletion=NO;

animation.duration = time;

animation.fillMode=kCAFillModeForwards;

return animation;

}

//旋转

-(CABasicAnimation *)rotation:(float)dur degree:(float)degree direction:(int)direction repeatCount:(int)repeatCount

{

CATransform3D rotationTransform = CATransform3DMakeRotation(degree, 0, 0,direction);

CABasicAnimation* animation;

animation = [CABasicAnimation animationWithKeyPath:@"transform"];

animation.toValue= [NSValue valueWithCATransform3D:rotationTransform];

animation.duration= dur;

animation.autoreverses= NO;

// animation.cumulative= YES;

animation.removedOnCompletion=NO;

animation.fillMode=kCAFillModeForwards;

animation.repeatCount= repeatCount;

animation.delegate= self;

return animation;

}

Similar Posts:

  • iOS 动画Animation-4-3: CALayer子类:CAShapeLayer

    首先说明:这是一系列文章,参考本专题下其他的文章有助于你对本文的理解. 好久没有更新博客,我也是上班一族,前一段时间工作量有点大,比较忙,也一直没有时间写博客.好在项目在上周末终于通过测试上线了,有可以休息一段时间了. 下面进入正题:今天介绍CAShapeLayer CAShapeLayer作为CALayer(关于CALayer参考:iOS动画Animation-4-1:CALayer)的子类,他有多了那些常用的API呢? API 描述 Path 这是一个比较重要的属性, 与UIBezier结合

  • iOS动画-CoreAnimation

    二. CoreAnimation--进行比较绚丽的动画,需要导入QuartzCore .CoreGraphics这两个framework 核心动画类有以下分类: ñ 提供显示内容的图层类. ñ 动画和计时类. ñ 布局和约束类. ñ 事务类,将多个层分成几个原子更新的执行类 1. 层(CALayer) CALayer本质上是一块包含一幅位图的缓冲区,由视图(UIView)创建的层为隐式层,而手动创建的层(layer)称为显示层. bounds,frame,position//控制UIView的大

  • iiOS开发UI篇--IOS动画(Core Animation)总结

    IOS动画Core-Anima 目录(?)[-] 一简介 二Core Animation类图以及常用字段 三IOS动画的调用方式 第一种UIView 代码块调用 第二种UIView begin commit模式 第三种使用Core Animation中的类 四IOS动画的使用 1基础动画CABaseAnimation 2关键帧动画CAKeyframeAnimation 3组动画CAAnimationGroup 4过渡动画CATransition 5综合案例 51 仿Path菜单效果 52 仿钉钉

  • 解析 iOS 动画原理与实现

    这篇文章不会教大家如何实现一个具体的动画效果,我会从动画的本质出发,来说说 iOS 动画的原理与实现方式. 什么是动画 动画,顾名思义,就是能"动"的画. 人的眼睛对图像有短暂的记忆效应,所以当眼睛看到多张图片连续快速的切换时,就会被认为是一段连续播放的动画了. 比如,中国古代的"走马灯",就是用的这个原理. 有些人还会在一个本子每页上手绘一些漫画,当快速翻页的时候,也会看到动画的效果,比如: 图片来自网络 计算机动画的实现方式 动画是由一张张图片组成的,在计算机中

  • iOS 动画效果详解

    转:http://geeklu.com/2012/09/animation-in-ios/ 零.前言 这里没有太多的代码细节,只是探索iOS动画的基本概念,以及其抽象模型,数学基础等.我们学习一个知识的时候一般有两个部分,抽象部分和形象部分,抽象好比语言的语法,是规则,形象好比具体的句子,可以用来和别人交流的.抽象比形象难于理解,但比形象通用.其实数学中经常碰到抽象和形象的概念,比如有一系列离散的点,这是形象;通过这些点我们拟合出一条曲线,得到其函数,函数是抽象的;然后通过这个函数我们可以得到更

  • iOS动画学习笔记3 Video Tutorial iOS Animation with Swift - Ray Wenderlich

    今天要实现的动画效果很简单,就是大家每天都能看到的一个页面️ 主要的动画就是下面提示右滑的label有一个滑动渐变的感觉,有没有一种以假乱真的感觉,话不多说,上代码~ var gradientLayer: CAGradientLayer = CAGradientLayer() var text = "Slide to reveal" 下面的视图区域开始有两个属性,一个是负责渐变效果的gradientLayer还有提示滑动的文本. gradientLayer.frame = CGRect

  • iOS动画和特效(二)UIKit力学行为

    iOS动画和特效(二)UIKit力学行为 UIKit Dynamics是UIKit的动力交互体系,比如重力,铰链连接,碰撞,悬挂等物理效果,它将2D物理引擎引入了人UIKit,它能使原本的动画和交互效果更加符合物理规律,当然动画效果也更逼真. 先看一个简单的demo view添加重力效果 //自由落体 func fall(){ /*给箱子加上重力效果*/ //初始化动画的持有者 let gravityAnimator = UIDynamicAnimator(referenceView: view

  • iOS动画篇:核心动画

    iOS动画篇:核心动画 基本概念 1.什么是核心动画 Core Animation(核心动画)是一组功能强大.效果华丽的动画API,无论在iOS系统或者在你开发的App中,都有大量应用. 核心动画所在的位置如下图所示: Core Animation.png 可以看到,核心动画位于UIKit的下一层,相比UIView动画,它可以实现更复杂的动画效果. 核心动画作用在CALayer(Core animation layer)上,CALayer从概念上类似UIView,我们可以将UIView看成是一种

  • iOS开发——实用技术&Github简单实战

    Github简单实战 1:新增一个仓库 2:设置仓库对应属性 3:创建仓库之后显示如下 4:找到对应的Https(SSH:这里比较麻烦,请查看相关教程)或者SVN,然后点击右边的剪头复制链接 5:打开Xcdoe的属性设置,在账户中找到新增界面,增加一个仓库 6:输入刚港拷贝的地址 7:输入用户名和密码:用户名就是github上面项目前面的那个名称,密码就是github的密码 8:新增github账户之后在Xcode中下载仓库到本地 9:选择对应的账户,并且下载到对应的本地文件夹 10:下载成功之

  • 从头说12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用

    摘自:http://blog.csdn.net/han_xiaoyang/article/details/12163251 作者:寒小阳 时间:2013年9月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/12163251. 声明:版权所有,转载请注明出处,谢谢. 0.前言 从 这一部分开始直接切入我们计算机互联网笔试面试中的重头戏算法了,初始的想法是找一条主线,比如数据结构或者解题思路方法,将博主见过做过整理过的算法题 逐个分析一遍

Tags: