核心动画的接触点滴(五)

1.简单介绍

UIKit直接将动画集成到UIView类中,当内部的一些属性发生改变时,UIView将为这些改变提供动画支持。动画的执行过程全部由UIView类自动完成,我们只需要通过调用[UIView beginAnimations: nil context:nil]和[UIView commitAnimations]这2个方法来通知视图即可。

常用的方法说明:

+ (void)setAnimationDelegate:(id)delegate   --------  设置动画代理对象,当动画开始或者结束时会发消息给代理对象

+ (void)setAnimationWillStartSelector:(SEL)selector   -------- 当动画即将开始时,执行delegate对象的selector,并且把beginAnimations:context:中传入的参数传进selector

+ (void)setAnimationDidStopSelector:(SEL)selector  --------- 当动画结束时,执行delegate对象的selector,并且把beginAnimations:context:中传入的参数传进selector

+ (void)setAnimationDuration:(NSTimeInterval)duration  --------- 动画的持续时间,秒为单位

+ (void)setAnimationDelay:(NSTimeInterval)delay  --------- 动画延迟delay秒后再开始

+ (void)setAnimationStartDate:(NSDate *)startDate   -------- 动画的开始时间,默认为now

+ (void)setAnimationCurve:(UIViewAnimationCurve)curve  --------- 动画的节奏控制

+ (void)setAnimationRepeatCount:(float)repeatCount  ---------- 动画的重复次数

+ (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses  -------- 如果设置为YES,代表动画每次重复执行的效果会跟上一次相反

+ (void)setAnimationTransition:(UIViewAnimationTransition)transition forView:(UIView *)view cache:(BOOL)cache  -------- 设置视图view的过渡效果, transition指定过渡类型, cache设置YES代表使用视图缓存,性能较好

代码示例:

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event

{

//首尾式动画

[UIView beginAnimations:nil context:nil];

//设置代理

[UIView setAnimationDelegate:self];

//设置执行需要的时间

[UIView setAnimationDuration:1.0f];

//设置延迟多久后执行

[UIView setAnimationDelay:1.0f];

//设置动画重复次数

[UIView setAnimationRepeatCount:MAXFLOAT];

//设置动画执行的节奏

[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

//设置重复执行时是否跟之前相反(YES代表相反)

[UIView setAnimationRepeatAutoreverses:YES];

//设置动画将要执行时的回调

[UIView setAnimationWillStartSelector:@selector(willStartAnimation)];

//设置动画完成后的回调

[UIView setAnimationDidStopSelector:@selector(didStopAnimation)];

_customView.center = CGPointMake(Width/2+ViewWidth, Height/2);

[UIView commitAnimations];

}

-(void)willStartAnimation

{

NSLog(@"动画将要执行时动画块的位置:%@",NSStringFromCGPoint(_customView.center));

}

-(void)didStopAnimation

{

NSLog(@"动画已经结束后动画块的位置:%@",NSStringFromCGPoint(_customView.center));

}

提示:

UIView和CALayer都可以实现视图动画,但一般在实际项目中还是使用UIView来实现动画,因为它在执行完动画后不回反弹。CALayer在表面上改变了layer的位置状态,实际上是没有做更改。不信可以用之前博文里的代码测试一下就知道了~

使用block回调的动画:

1.常用动画

+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion

参数解析:

duration:      动画执行的时间

delay:           动画延迟多久后开始

options:        动画的节奏类型

animations: 将改变视图属性的代码放在这个block中

completion:动画结束后,会自动调用这个block

2.转场动画(一)

+ (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion

参数解析:

duration:      动画的持续时间

view:             需要进行转场动画的视图

options:        转场动画的类型

animations: 将改变视图属性的代码放在这个block中

completion动画结束后,会自动调用这个block

转场动画(二)

+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion

参数解析:

duration:动画的持续时间

options:转场动画的类型

animations:将改变视图属性的代码放在这个block中

completion:动画结束后,会自动调用这个block

调用这个方法相当于执行了下面两句代码:

// 添加toView到父视图

[fromView.superview addSubview:toView];

// 把fromView从父视图中移除

[fromView  removeFromSuperview];

代码示例:

[UIView transitionWithView:self.customView duration:3.0 options:0 animations:^{             //执行的动画

NSLog(@"动画开始执行前的位置:%@",NSStringFromCGPoint(self.customView.center));

self.customView.center=CGPointMake(200, 300);

} completion:^(BOOL finished) {

//动画执行完毕后的首位操作

NSLog(@"动画执行完毕");

NSLog(@"动画执行完毕后的位置:%@",NSStringFromCGPoint(  self.customView.center));

}];

注意:self.customView.layer.position和self.customView.center等价,因为position的默认值为(0.5,0.5)。

时间: 2024-10-11 07:06:32

核心动画的接触点滴(五)的相关文章

核心动画的接触点滴(三)

本篇记录的是核心动画的中的CApropertyAnimation中的关键帧动画部分.非常有用: 关键帧动画是CApropertyAnimation的子类,跟CABasicAnimation的区别是:CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSArray保存这些数值 属性解析: values:就是上述的NSArray对象.里面的元素称为"关键帧"(keyframe).动画对象会

核心动画的接触点滴(一)

本周项目进展仍然没有太大变化,于是接着上周未完成的计划,开始着手对核心动画开始做学习了解和记录. OS开发UI篇-核心动画简介 一.简单介绍 Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就可以实现非常强大的功能. Core Animation是跨平台的,可以用在Mac OS X和iOS平台. Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程.不阻塞主线程,

核心动画的接触点滴(二)

本篇记录核心动画中基础动画的使用: 一.简单介绍 CAPropertyAnimation的子类 属性解析: fromValue:keyPath相应属性的初始值 toValue:keyPath相应属性的结束值 随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue渐渐地变为toValue 如果fillMode=kCAFillModeForwards和removedOnComletion=NO,那么在动画执行完毕后,图层会保持显示动画执行        

核心动画的接触点滴(四)

一.转场动画接受 CAAnimation的子类,用于做转场特效,可以为层做移入或移除屏幕的动画效果.比如像UINavigationController就是使用的转场动画进行页面的推出和进入的. 包含属性: type:动画的过渡类型(以何种方式进行执行转场动画) subtype:过渡方向 startProgress:起始点(在整体动画的百分比) endProgress:终结点(在整体动画的百分比) 二.代码示例 { //创建转场动画实例 CATransition *CTAnima = [CATra

ios开发核心动画五:图标抖动效果--CAKeyframeAnimation

#import "ViewController.h" #define angle2Rad(angle) ((angle) / 180.0 * M_PI) @interface ViewController () @property (weak, nonatomic) IBOutlet UIImageView *imageV; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //

IOS-CoreAnimation(核心动画)

一.核心动画 1.Core Animation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍,使用它需要先添加QuartzCore.framework和引入对应的框架<QuartzCore/QuartzCore.h> 2.开发步骤: ①初始化一个动画对象(CAAnimation)并设置一些动画相关属性 ②添加动画对象到层(CALayer)中,开始执行动画 3.CALayer中很多属性都可以通过CAAnimation实现动画效果,包括:opacity.posi

iOS_核心动画CALayer(一)

目 录: 一.核心动画简介 二.图层与视图之间的关系 三.CALayer的使用说明 四.CALayer的隐式动画属性 五.在CALayer上绘图 六.总结 一.核心动画简介 Core Animation 是跨平台的,支持iOS环境和Mac OS X环境,而CALayer是核心动画的基础,可以帮助开发者做圆角.阴影.边框等效果.我们学习核心动画之前,需要先理解CALayer,因为核心动画操作的对象不是UIView,而是CALayer.对于UIView控件每个内部都有一个Layer的属性.我们在实现

IOS开发——UI进阶篇(十七)CALayer,核心动画基本使用

一.CALayer简介 1.CALayer在iOS中,文本输入框.一个图标等等,这些都是UIView你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层 在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层 @property(nonatomic,readonly,retain) CALayer *layer; 当UIView需

iOS核心动画

iOS开发系列--让你的应用“动”起来 --iOS核心动画 概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建基础动画.关键帧动画.动画组.转场动画,如何通过UIView的装饰方法对这些动画操作进行简化等.在今天的文章里您可以看到动画操作在iOS中是如何简单和高效,很多原来想做但是苦于没有思路的动画在iOS中将变得越发简单: CALayer CALayer简介 CAL