IOS简单的动画自定义方法(旋转、移动、闪烁等)

作者:网络    软件教程库   2020-05-16

#define kdegreestoradian(x) (m_pi * (x) /180.0)

#define kradiantodegrees(radian) (radian*180.0)/(m_pi)

- (void)viewdidload

{

[superviewdidload];

self.title=@"测试动画";

self.view.backgroundcolor= [uicolor lightgraycolor];

mytest1= [[uilabel alloc]initwithframe:cgrectmake(10,100,60,40)];

mytest1.backgroundcolor= [uicolor bluecolor];

mytest1.textalignment=nstextalignmentcenter;

mytest1.text=@"张明炜";

mytest1.textcolor= [uicolor whitecolor];

[self.view addsubview:mytest1];

//闪烁效果。

// [mytest1.layer addanimation:[self opacityforever_animation:0.5] forkey:nil];

///移动的动画。

// [mytest1.layer addanimation:[self movex:1.0f x:[nsnumber numberwithfloat:200.0f]] forkey:nil];

//缩放效果。

// [mytest1.layer addanimation:[self scale:[nsnumber numberwithfloat:1.0f] orgin:[nsnumber numberwithfloat:3.0f] durtimes:2.0f rep:maxfloat] forkey:nil];

//组合动画。

// nsarray *myarray = [nsarray arraywithobjects:[self opacityforever_animation:0.5],[self movex:1.0f x:[nsnumber numberwithfloat:200.0f]],[self scale:[nsnumber numberwithfloat:1.0f] orgin:[nsnumber numberwithfloat:3.0f] durtimes:2.0f rep:maxfloat], nil];

// [mytest1.layer addanimation:[self groupanimation:myarray durtimes:3.0f rep:maxfloat] forkey:nil];

//路径动画。

// cgmutablepathref mypah = cgpathcreatemutable();

// cgpathmovetopoint(mypah, nil,30, 77);

// cgpathaddcurvetopoint(mypah, nil, 50, 50, 60, 200, 200, 200);//这里的是控制点。

// [mytest1.layer addanimation:[self keyframeanimation:mypah durtimes:5 rep:maxfloat] forkey:nil];

//旋转动画。

[mytest1.layeraddanimation:[self rotation:2 degree:kradiantodegrees(90)direction:1 repeatcount:maxfloat]forkey:nil];

}

#pragma mark ===永久闪烁的动画======

-(cabasicacnimation*)opacityforever_animation:(float)time

{

cabasicanimation*animation = [cabasicanimationanimationwithkeypath:@"opacity"];//必须写opacity才行。

animation.fromvalue= [nsnumbernumberwithfloat:1.0f];

animation.tovalue= [nsnumbernumberwithfloat:0.0f];//这是透明度。

animation.autoreverses=yes;

animation.duration= time;

animation.repeatcount=maxfloat;

animation.removedoncompletion=no;

animation.fillmode=kcafillmodeforwards;

animation.timingfunction=[camediatimingfunctionfunctionwithname:kcamediatimingfunctioneasein];///没有的话是均匀的动画。

returnanimation;

}

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

-(cabasicanimation*)movex:(float)time x:(nsnumber*)x

{

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

animation.tovalue= x;

animation.duration= time;

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

animation.repeatcount=maxfloat;

animation.fillmode=kcafillmodeforwards;

returnanimation;

}

#pragma mark =====缩放-=============

-(cabasicanimation*)scale:(nsnumber*)multiple orgin:(nsnumber*)orginmultiple durtimes:(float)time rep:(float)reperttimes

{

cabasicanimation*animation = [cabasicanimationanimationwithkeypath:@"transform.scale"];

animation.fromvalue= multiple;

animation.tovalue= orginmultiple;

animation.autoreverses=yes;

animation.repeatcount= reperttimes;

animation.duration= time;//不设置时候的话,有一个默认的缩放时间.

animation.removedoncompletion=no;

animation.fillmode=kcafillmodeforwards;

return animation;

}

#pragma mark =====组合动画-=============

-(caanimationgroup*)groupanimation:(nsarray*)animationary durtimes:(float)time rep:(float)repeattimes

{

caanimationgroup*animation = [caanimationgroupanimation];

animation.animations= animationary;

animation.duration= time;

animation.removedoncompletion=no;

animation.repeatcount= repeattimes;

animation.fillmode=kcafillmodeforwards;

returnanimation;

}

#pragma mark =====路径动画-=============

-(cakeyframeanimation*)keyframeanimation:(cgmutablepathref)path durtimes:(float)time rep:(float)repeattimes

{

cakeyframeanimation*animation = [cakeyframeanimationanimationwithkeypath:@"position"];

animation.path= path;

animation.removedoncompletion=no;

animation.fillmode=kcafillmodeforwards;

animation.timingfunction= [camediatimingfunctionfunctionwithname:kcamediatimingfunctioneasein];

animation.autoreverses=no;

animation.duration= time;

animation.repeatcount= repeattimes;

returnanimation;

}

#pragma mark ====旋转动画======

-(cabasicanimation*)rotation:(float)dur degree:(float)degree direction:(int)direction repeatcount:(int)repeatcount

{

catransform3drotationtransform =catransform3dmakerotation(degree,0,0, direction);

cabasicanimation*animation = [cabasicanimationanimationwithkeypath:@"transform"];

animation.tovalue= [nsvaluevaluewithcatransform3d:rotationtransform];

animation.duration = dur;

animation.autoreverses=no;

animation.cumulative=no;

animation.fillmode=kcafillmodeforwards;

animation.repeatcount= repeatcount;

animation.delegate=self;

returnanimation;

}

转自:http://zhangmingwei.iteye.com/blog/2101782

ios 简单的动画自定义方法(旋转、移动、闪烁等)

原文地址:http://www.cnblogs.com/huangzs/p/4471430.html

软件教程库 该篇文章地址:https://www.itjcku.com/9999/1091429.html

阅读全部内容


Tags:简单动画自定义方法法子旋转

返回首页



推荐内容

swift学习笔记3-4

再牛逼的梦想,也抵不住你傻逼似的坚持! 我跑啊跑啊,为的就是赶上那个被寄予厚望的自己。 三、运算符+表达式 swift允 ...

Trie树初学

#includelt;cstdiogt; #includelt;cstringgt; #includelt;cstdli ...

Android--状态栏高度

干货 classlt;gt; c = null; object obj = null; field field = n ...

//hdu2222//AC自动机初学

// hdu2222 // #includelt;cstdiogt; #includelt;cstringgt; #in ...

黑书笔记

就从p77开始记好了.(稍微扩容) p77 排序. 1.香农信息论 基于比较的排序不可能突破o(nlogn)的复杂度限制 ...

//codeforces471D//kmp初学

// codeforces 471d // #includelt;cstdiogt; #includelt;cstrin ...

搭建基于域名虚拟主机

修改主配置文件 # cd /etc/httpd/conf.d/ # vim vhost.conf lt;virtu ...

Mysql5.6.24zip解压缩版配置及修改默认编码方法

win64位下载地址: http://dev.mysql.com/downloads/file.phpid=456319 ...

图片的预加载和按需加载

图片预加载 lt;!doctype htmlgt; lt;htmlgt; lt;headgt; lt;meta htt ...

iPhone/iPad程序怎么禁止自动休眠

//禁止自动休眠可以通过这一句话搞定:[uiapplication sharedapplication].idletim ...

普林斯顿《算法II》第一周学习笔记UndirectedGraph

普林斯顿的算法课是cousera上评价挺高的一门课,课程的教学语言用的是java,课程中的算法都会被封装成类的形式,对于 ...

headFirst学习笔记之九:迭代器与组合模式(5.1)

1.任务: 大新闻!对象村餐厅和对象村煎饼屋合并了!可以在同一个地方吃早饭和午饭了hohoho(有什么好开森的对象村的小 ...

IOSapplicationWillResignActive

一、挂起当有电话进来或者锁屏,这时你的应用程会挂起,在这时,uiapplicationdelegate委托会收到通知,调 ...

哥我要向前看了

七年前的五一节前的那个周六,我遇到生命中一个重要的人。虽然相处短暂,好梦不长,但是回忆丰满,念念不忘。 七年后的五一节, ...

GoldSmith第二章

uhf:特高频 300m-3000mhz shf:超高频 3g-30g 所有发射与接收的信号都是实信号(因为调制器的振荡 ...

动态规划总结【模板】

最长递增子序列 给定一个序列,找到最长子序列的长度,使得子序列中的所有元素被排序的顺序增加。 1.求最长递增子序列的 ...

HDUACM1103Flo'sRestaurant

分析:借助stl的min_element实现。每次更新最先被占用的桌子,具体见注释。 #includelt;iostre ...

【翻译自mos文章】Oracledb12c中,每次日志切换时,会改变alert_sid.log的权限

12c中,每次日志切换时,会改变alert_sid.log的权限 来源于: alert log file‘s perm ...

poj1988(并查集)

题意:有30000个木块,编号从1到30000,然后有两种操作m a b,把木块a所在的堆块放到木块b所在的堆块上,操作 ...

org.hibernate.exception.GenericJDBCException:Couldnotopenconnection

1、错误描述 org.hibernate.exception.genericjdbcexception: could ...

ubuntu下mysql导出数据

使用的是workbench,原因时workbench的导出工具mysqldump和mysql的版本不一致,这个时候手动指 ...

怎样看懂女人哪些最直接的肢体暗示,撒娇

主动拥抱。 拥抱是最简单却十分亲密的身体接触,女人在想亲热时,会主动寻求拥抱,向伴侣靠近。如果她躺在你的怀抱中,并用语言 ...

移动后端云平台Bmob介绍

对于移动端的独立开发者来说,最痛苦的事情莫过于搭建后台服务器。没有基础的还得从头学起,有技术的又要搭建维护后台,非常 ...

WAMP配置虚拟主机

问题背景:从网上下载了一个php项目a,a项目需要部署在网站的根目录下。配置虚拟主机可以解决这个问题。1.打开apach ...

java克隆测试

1.person类 1 //clone方法必须实现cloneable接口 2 public class perso ...

C++string中用于查找的find系列函数浅析

总述:以下所讲的所有的string查找函数,都有唯一的返回类型,那就是size_type,即一个无符号整数(按打印出来的 ...

Savingoutputofagrepintoafilewithcolors

19 down vote favorite 7 i need to save the result o ...

hibernate异常之QueryException

org.hibernate.queryexception: expected positional parameter ...

Redis的Python客户端redis-py的初步使用

1. 安装 sudo pip install redis sudo pip install hiredis pa ...

《构建高性能Web站点》笔记

书名:构建高性能web站点 出版社: 电子工业出版社 isbn:9787121170935 一 绪论 等待的时间: ( ...


本网站部分内容来自互联网,版权归原作者所有,文章内容仅代表原作者个人观点。如有侵权请联系我们删除 电子邮件 itjcku@foxmail.com