ios(CoreAnimation核心动画 ) CABasicAnimation动画与锚点

一、position和anchorPoint

position:用来设置CALayer在父层中的位置,以父层的左上角为原点(0, 0)

anchorPoint(锚点):

称为“定位点”、“锚点”

决定着CALayer身上的哪个点会在position属性所指的位置

以自己的左上角为原点(0, 0)

它的x、y取值范围都是0~1,默认值为(0.5, 0.5)

推荐一个连接:http://www.cnblogs.com/wendingding/p/3800736.html讲的非常详细,而且有图视,默认的锚点为中心点:(0.5,0.5),如果重新设置了锚点,运行动画的时候会发现整个控件移动了,所以在设置锚点的时候需要重新设置position,

CGPoint oldAnchorPoint = _homeBtn.layer.anchorPoint;

_homeBtn.layer.anchorPoint =CGPointMake(0.5,0);

[_homeBtn.layersetPosition:CGPointMake(_homeBtn.layer.position.x
+ _homeBtn.layer.bounds.size.width
* (_homeBtn.layer.anchorPoint.x - oldAnchorPoint.x),_homeBtn.layer.position.y
+_homeBtn.layer.bounds.size.height
* (_homeBtn.layer.anchorPoint.y - oldAnchorPoint.y))];

二:CABasicAnimation的使用

当你创建一个
CABasicAnimation 时,你需要通过-setFromValue 和-setToValue 来指定一个开始值和结束值。 当你增加基础动画到层中的时候,它开始运行。

Autoreverses

当你设定这个属性为 YES 时,在它到达目的地之后,动画的返回到开始的值,代替了直接跳转到 开始的值。

Duration
Duration 这个参数你已经相当熟悉了。它设定开始值到结束值花费的时间。期间会被速度的属性所影响。 RemovedOnCompletion
这个属性默认为 YES,那意味着,在指定的时间段完成后,动画就自动的从层上移除了。这个一般不用。

假如你想要再次用这个动画时,你需要设定这个属性为 NO。这样的话,下次你在通过-set 方法设定动画的属
性时,它将再次使用你的动画,而非默认的动画。

Speed

默认的值为 1.0.这意味着动画播放按照默认的速度。如果你改变这个值为 2.0,动画会用 2 倍的速度播放。
这样的影响就是使持续时间减半。如果你指定的持续时间为 6 秒,速度为 2.0,动画就会播放 3 秒钟---一半的
持续时间。

BeginTime

这个属性在组动画中很有用。它根据父动画组的持续时间,指定了开始播放动画的时间。默认的是 0.0.组 动画在下个段落中讨论“Animation
Grouping”。

TimeOffset

如果一个时间偏移量是被设定,动画不会真正的可见,直到根据父动画组中的执行时间得到的时间都流逝 了。

RepeatCount

默认的是 0,意味着动画只会播放一次。如果指定一个无限大的重复次数,使用 1e100f。这个不应该和 repeatDration 属性一块使用。

RepeatDuration

这个属性指定了动画应该被重复多久。动画会一直重复,直到设定的时间流逝完。它不应该和 repeatCount 一起使用。

示例代码:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

    CGPoint fromPoint = self.testImage.center;

    

    //路径曲线controlPoint为基准点

    UIBezierPath * movePath = [UIBezierPath bezierPath];

    [movePath moveToPoint:fromPoint];

    CGPoint toPoint = CGPointMake(300, 460);

    [movePath addQuadCurveToPoint:toPoint controlPoint:CGPointMake(300, 0)];

    

    //关键帧  设置动画路径

    CAKeyframeAnimation * moveAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];

//    moveAnimation.path = movePath.CGPath;

    moveAnimation.values = @[[NSValue valueWithCGPoint:CGPointMake(100, 100)],[NSValue valueWithCGPoint:CGPointMake(100, 300)],[NSValue valueWithCGPoint:CGPointMake(300, 300)],[NSValue valueWithCGPoint:CGPointMake(300, 100)]];

    moveAnimation.removedOnCompletion = YES;

    

    //缩放变化

    CABasicAnimation * scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform"];

    scaleAnimation.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];

    scaleAnimation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)];

    scaleAnimation.removedOnCompletion = YES;

    

//    //透明度变化

//    CABasicAnimation * opacityAnimation = [CABasicAnimation animationWithKeyPath:@"alpha"];

//    opacityAnimation.fromValue = [NSNumber numberWithFloat:1.0];

//    opacityAnimation.toValue = [NSNumber numberWithFloat:0.1];

//    opacityAnimation.removedOnCompletion = YES;

    

    //旋转

    CABasicAnimation * tranformAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];

    tranformAnimation.fromValue = [NSNumber numberWithFloat:0.f];

    tranformAnimation.toValue = [NSNumber numberWithFloat:M_PI];

    tranformAnimation.cumulative = YES;

    tranformAnimation.removedOnCompletion = YES;

    

    CAAnimationGroup*animaGroup = [CAAnimationGroup animation];

    animaGroup.animations = @[moveAnimation,scaleAnimation,tranformAnimation];

    animaGroup.duration = 2.f;

可以通过改变animationWithKeyPath来改变动画:

transform.scale = 比例轉換

transform.scale.x = 闊的比例轉換

transform.scale.y = 高的比例轉換

transform.rotation.z = 平面圖的旋轉

opacity = 透明度

margin

zPosition

backgroundColor 背景颜色

cornerRadius 圆角

borderWidth

bounds

contents

contentsRect

cornerRadius

frame

hidden

mask

masksToBounds

opacity

position

shadowColor

shadowOffset

shadowOpacity

shadowRadius

58同城客户端,tabbar的点击的动画效果,就可以通过设置CABasicAnimation属性来做,个人花了一个小时的时间搞定,证明完全可以实现,

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

CGPoint oldAnchorPoint =  _homeBtn.layer.anchorPoint;

   _homeBtn.layer.anchorPoint = CGPointMake(0.5, 0);

    [_homeBtn.layer setPosition:CGPointMake(_homeBtn.layer.position.x + _homeBtn.layer.bounds.size.width * (_homeBtn.layer.anchorPoint.x - oldAnchorPoint.x), _homeBtn.layer.position.y + _homeBtn.layer.bounds.size.height * (_homeBtn.layer.anchorPoint.y - oldAnchorPoint.y))];

   

   

   CABasicAnimation*shakeAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];

   

   shakeAnimation.duration = 0.07;

   shakeAnimation.autoreverses = YES;//当你设定这个属性为 YES 时,在它到达目的地之后,动画的返回到开始的值,代替了直接跳转到 开始的值。

   shakeAnimation.repeatCount = 2;

   shakeAnimation.removedOnCompletion = NO;

   shakeAnimation.fromValue = [NSNumber  numberWithFloat:-0.05];

   shakeAnimation.toValue = [NSNumber  numberWithFloat:0.05];

   

   [self.homeBtn.layer addAnimation:shakeAnimation forKey:@"shakeAnimation"];

时间: 2024-10-23 08:45:57

ios(CoreAnimation核心动画 ) CABasicAnimation动画与锚点的相关文章

iOS CoreAnimation(核心动画二)

CATransition :转场动画  翻转动画 @interface ViewController () - (IBAction)previous:(UIButton *)sender; - (IBAction)next:(UIButton *)sender; @property (strong, nonatomic) IBOutlet UIImageView *iconView; @property(nonatomic,assign)int index;//当前图片的索引 @property

iOS CoreAnimation 基础动画CABasicAnimation

本文参考:http://www.cnblogs.com/kenshincui/p/3972100.html#autoid-3-0-0总结的: Core Animation * iOS 核心动画的实现 CoreAnimation (包含在Quartz Core 框架中), 在iOS核心动画分为几类(基础动画, 关键帧动画, 动画组, 转场动画, ) CAAnimation : 核心动画的基础类, 不能直接用, 负责动画运行时间吗速度的控制, 实现了CAMediaTiming协议 CAPropert

iOS:核心动画之基本动画CABasicAnimation

基本动画,是CAPropertyAnimation的子类 属性说明: fromValue:keyPath相应属性的初始值 toValue:keyPath相应属性的结束值 动画过程说明: 随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue渐渐地变为toValue keyPath内容是CALayer的可动画Animatable属性 如果fillMode=kCAFillModeForwards同时removedOnComletion=NO,那么在动画执

ios之核心动画(Core Animation)

Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就可以实现非常强大的功能. Core Animation可以用在Mac OS X和iOS平台. Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程. 要注意的是,Core Animation是直接作用在CALayer上的,并非UIView. CALayer与UIView的关系 在iOS中,你能看得见摸得着的东西基本

iOS学习笔记09-核心动画CoreAnimation

一.CALayer CALayer包含在QuartzCore框架中,具有跨平台性,在iOS中使用Core Animation开发动画的本质是 将CALayer内容转化为位图从而供硬件操作 . 常用属性: 属性 描述 anchorPoint 和中心position重合的点,称为锚点,范围在(0~1,0~1) position 图层中心点位置,相当于UIView的center bounds 图层大小 opacity 透明度,相当于UIView的alpha 创建自定义CALayer: //自定义图层

iOS开发UI篇—核心动画(基础动画)

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

iOS:核心动画的详解介绍:CAAnimation(抽象类)及其子类

核心动画的详解介绍:CAAnimation(抽象类) 1.核心动画基本概念 Core Animation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍! 使用它需要先添加QuartzCore.framework和引入对应的框架<QuartzCore/QuartzCore.h> ,在iOS7中不需要 2.动画分类 基本动画    CABasicAnimation 关键帧动画  CAKeyframeAnimation 动画组     CAAnimationGro

iOS开发UI篇—核心动画(关键帧动画)

iOS开发UI篇—核心动画(关键帧动画) 一.简单介绍 是CApropertyAnimation的子类,跟CABasicAnimation的区别是:CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSArray保存这些数值 属性解析: values:就是上述的NSArray对象.里面的元素称为”关键帧”(keyframe).动画对象会在指定的时间(duration)内,依次显示values数组

核心动画基础动画(CABasicAnimation)关键帧动画

1.在iOS中核心动画分为几类: 基础动画(CABasicAnimation) 关键帧动画(CAKeyframeAnimation) 动画组(CAAnimationGroup) 转场动画(CATransition) 2.CAAnimation:核心动画的基础类,不能直接使用,负责动画运行时间,速度的控制,本身实现了CAMediaTiming协议 3.CAPropertyAnimation:属性动画也是基类(通过属性进行动画设置,注意是动画属性),不能直接使用. CABasicAnimation:

IOS学习--核心动画

1.CoreAnimation的介绍 Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就可以实现非常强大的功能. Core Animation可以用在Mac OS X和iOS平台. Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程. 要注意的是,Core Animation是直接作用在CALayer上的,并非UIView 详细地址:http://www.cnb