UIView-Animation动画 Version0.3

执行方法

//准备开始动画,animationID 标识动画,context自定义消息
+(void)beginAnimations:(NSString *)animationID context:(void *)context;

// 运行动画
+ (void)commitAnimations;

// 设置代理 default = nil
+ (void)setAnimationDelegate:(id)delegate;

// 将要开始动画时执行某些方法
+ (void)setAnimationWillStartSelector:(SEL)selector;

// 动画结束执行某些操作
+ (void)setAnimationDidStopSelector:(SEL)selector;

// default = 0.2 ,设置动画持续事件
+ (void)setAnimationDuration:(NSTimeInterval)duration;

// default = 0.0 , 设置动画开始时间
+ (void)setAnimationDelay:(NSTimeInterval)delay;

// default = now ([NSDate date]) , 设置动画开始日期
+ (void)setAnimationStartDate:(NSDate *)startDate;

// default = UIViewAnimationCurveEaseInOut 设置动画运动效果
+ (void)setAnimationCurve:(UIViewAnimationCurve)curve;

// default = 0.0 设置动画重复次数
+ (void)setAnimationRepeatCount:(float)repeatCount;

//default = NO. 动画自动重复,重复次数不能为0
+ (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses;

// default = NO. If YES如果是,当前视图的位置总是用于新的动画,否则,最终状态是用于动画。
+ (void)setAnimationBeginsFromCurrentState:(BOOL)fromCurrentState;

// current limitation - only one per begin/commit
+ (void)setAnimationTransition:(UIViewAnimationTransition)transition forView:(UIView *)view cache:(BOOL)cache;

// ignore any attribute changes while set.
+ (void)setAnimationsEnabled:(BOOL)enabled;

// 返回一个bool值,表示动画是否结束了
+ (BOOL)areAnimationsEnabled;

//新开一条线程执行
+ (void)performWithoutAnimation:(void (^)(void))actionsWithoutAnimation

🌰
<code>
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
要执行的动画
[UIView commitAnimations];

</code>
+(void)animateWithDuration:(NSTimeInterval)duration//时间 delay:(NSTimeInterval)delay//延迟 options:(UIViewAnimationOptions)options//动画方式 animations:(void (^)(void))animations//变换内容 completion:(void (^)(BOOL finished))completion//变换结束

动画效果

跟父类作为一个整体一起动画,此方式为默认方式
default
UIViewAnimationOptionLayoutSubviews

动画过程中 允许用户点击 比如button
turn on user interaction while animating
UIViewAnimationOptionAllowUserInteraction

从当前状态开始动画,父层动画运动期间,开始子层动画
start all views from current value, not initial value
UIViewAnimationOptionBeginFromCurrentState

执行动画后瞬间跳到初始状态继续无限次的执行同一动作
repeat animation indefinitely
UIViewAnimationOptionRepeat

反向执行一个动画,当动画执行完一遍后,沿原路径反向执行一遍.
if repeat, run animation back and forth
UIViewAnimationOptionAutoreverse

忽略继承自父层持续时间,使用自己持续时间(如果存在)
ignore nested duration
UIViewAnimationOptionOverrideInheritedDuration

忽略继承自父层的线性效果,使用自己的线性效果(如果存在)
ignore nested curve
UIViewAnimationOptionOverrideInheritedCurve

允许同一个view的多个动画同时进行
animate contents (applies to transitions only)
UIViewAnimationOptionAllowAnimatedContent

控制两个subview的显示示和隐藏(功能类似于addsubviewremovefromsuperview),使用这个属性(一般在transitionFromView:toView:duration:options:completion:这个方法中使用),FromView会被隐藏toView会被显示
flip to/from hidden state instead of adding/removing
UIViewAnimationOptionShowHideTransitionViews

UIViewAnimationOptionCurveEaseInOut // default
UIViewAnimationOptionCurveEaseIn
UIViewAnimationOptionCurveEaseOut
UIViewAnimationOptionCurveLinear

UIViewAnimationOptionTransitionNone // default
UIViewAnimationOptionTransitionFlipFromLeft // 从左向右扭转翻页
UIViewAnimationOptionTransitionFlipFromRight // 从右向左扭转翻页
UIViewAnimationOptionTransitionCurlUp // 卷曲翻页,从下往上
UIViewAnimationOptionTransitionCurlDown // 卷曲翻页,从上往下
UIViewAnimationOptionTransitionCrossDissolve // 重叠,当一个view从一个位置到另一个位置时,当前的view会由透明状态逐渐到达显示到目的位置,原来的位置将会保留一个影子,并逐渐消失
UIViewAnimationOptionTransitionFlipFromTop // 从上向下扭转翻页
UIViewAnimationOptionTransitionFlipFromBottom // 从下向上扭转翻页

#define kDegreesToRadian(x) (M_PI * (x) / 180.0)
 
#define kRadianToDegrees(radian) (radian*180.0)/(M_PI)
 
- (void)viewDidLoad
{
    [superviewDidLoad];
    self.title = @"测试动画";
    self.view.backgroundColor = [UIColorlightGrayColor];
    
    
    myTest1 = [[UILabelalloc]initWithFrame:CGRectMake(10, 100, 60, 40)];
    myTest1.backgroundColor = [UIColorblueColor];
    myTest1.textAlignment = NSTextAlignmentCenter;
    myTest1.text = @"张明炜";
    myTest1.textColor = [UIColorwhiteColor];
    [self.viewaddSubview: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:[selfrotation:2degree:kRadianToDegrees(90) direction:1repeatCount: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];///没有的话是均匀的动画。
    return animation;
}
 
#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;
    return animation;
}
 
#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;
    return animation;
}
 
#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;
    return animation;
}
 
#pragma mark ====旋转动画======
-(CABasicAnimation *)rotation:(float)dur degree:(float)degree direction:(int)direction repeatCount:(int)repeatCount
{
    CATransform3D rotationTransform = CATransform3DMakeRotation(degree, 0, 0, direction);
    CABasicAnimation *animation = [CABasicAnimationanimationWithKeyPath:@"transform"];
    animation.toValue = [NSValue valueWithCATransform3D:rotationTransform];
    animation.duration  =  dur;
    animation.autoreverses = NO;
    animation.cumulative = NO;
    animation.fillMode = kCAFillModeForwards;
    animation.repeatCount = repeatCount;
    animation.delegate = self;
 
    return animation;
 
}

http://grayluo.github.io/WeiFocusIo/core%20animation/2015/12/07/coreanimation/

http://www.cnblogs.com/ludashi/p/4160208.html?utm_source=tuicool&utm_medium=referral

各种动画方式demo:https://github.com/lizelu/CATransitionDemo.git

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容