POP动画引擎中Layer与CALayer的一点区别

POP动画引擎是facebook提供的一个开源框架, 可以实现很多的动画效果, 这里就不一一介绍啦, 有兴趣的童鞋请移步:

https://github.com/facebook/pop

下面简单的讲一下POP动画引擎中Layer与CALayer的区别:

这里, 代码做的都是同一个效果: 执行位移动画3秒, 然后在1秒后移除所有动画

使用POP效果图:

使用CALayer效果图:

可以看到, POP执行的动画当动画被移除之后, 被执行对象保留了被停止时的状态

而CALayer执行的动画当动画被移除之后, 跳到了另外一个状态, 这是因为CALayer添加的

CABasicAnimation动画会另外生成一个图层来执行动画, 而CALayer本身早已经是动画结束后状态, 当动画结束后就会显示出来,

所以就会出现, 当动画执行到一半被移除的时候, 就会出现跳动的现象..

这也就是这两者之间的一点区别..

以下是代码:

#import "ViewController.h"
#import <POP.h>

@interface ViewController ()

// 测试CALayer
@property (nonatomic, strong) CALayer *normalLayer;
// 用于测试POP的Layer
@property (nonatomic, strong) CALayer *popLayer;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

}

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

    [self setupNormalLayer];

    // 一秒后移除所有动画
    [self performSelector:@selector(stopAnimation) withObject:nil afterDelay:1.f];
}

- (void)setupPopLayer
{
    // 初始化
    self.popLayer = [CALayer layer];
    self.popLayer.frame = CGRectMake(0, 0, 100, 100);
    self.popLayer.backgroundColor = [UIColor redColor].CGColor;
    [self.view.layer addSublayer:self.popLayer];
    // 添加POP动画
    POPBasicAnimation *basicAnimation = [POPBasicAnimation animationWithPropertyNamed:@"position"];
    basicAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(self.popLayer.position.x, 300)];
    basicAnimation.duration = 3.f;
    [self.popLayer pop_addAnimation:basicAnimation forKey:nil];
}

- (void)setupNormalLayer
{
    // 初始化
    self.normalLayer = [CALayer layer];
    self.normalLayer.frame = CGRectMake(0, 0, 100, 100);
    self.normalLayer.backgroundColor = [UIColor redColor].CGColor;
    [self.view.layer addSublayer:self.normalLayer];
    // 添加动画
    CABasicAnimation *basicAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
    basicAnimation.fromValue = [NSValue valueWithCGPoint:CGPointMake(self.normalLayer.position.x, self.normalLayer.position.y)];
    basicAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(self.normalLayer.position.x, 300)];
    basicAnimation.duration = 3.f;
    [self.normalLayer addAnimation:basicAnimation forKey:nil];

    self.normalLayer.position = CGPointMake(self.normalLayer.position.x, 300);
}

- (void)stopAnimation
{
    [self.normalLayer removeAllAnimations];
//    [self.popLayer pop_removeAllAnimations];
}

@end
时间: 2024-10-27 12:14:00

POP动画引擎中Layer与CALayer的一点区别的相关文章

用POP动画引擎实现弹簧动画(POPSpringAnimation)

效果图: #import "ViewController.h" #import <POP.h> @interface ViewController () @property (nonatomic, weak) UIView *testView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor

Xcode7.3.1中通过最新的CocoaPod安装pop动画引擎

CocoaPod是一个用ruby实现,用于方便的管理Xcode中第三方插件的管理器.用它我们可以很方便的安装和升级插件而不用担心破坏原有的项目. 而pop是一个用于实现App中动画的引擎,它是由Facebook开源的,如果本猫没记错的话 ;] 下面简单聊聊如何在最新的Xcode中安装pop 首先你必须在mac上安装ruby,无论你使用rvm还是从源代码自己编译生成. 接着打开终端输入如下指令: sudo gem install cocoapods 玩过ruby的都知道,这是通过ruby安装gem

ios中layer动画和UIView动画代码总结

kCATransitionFade淡出 kCATransitionMoveIn覆盖原图 kCATransitionPush推出 kCATransitionReveal底部显出来 pageCurl   向上翻一页 pageUnCurl 向下翻一页 rippleEffect 滴水效果 suckEffect 收缩效果,如一块布被抽走 cube 立方体效果 oglFlip 上下翻转效果 #pragma mark UIView 动画 - (IBAction)pressClick1:(id)sender {

POP动画[1]

POP动画[1] pop动画是facebook扩展CoreAnimation的,使用及其方便:) 1:Spring系列的弹簧效果(两个动画kPOPLayerBounds与kPOPLayerCornerRadius同时运行) #import "RootViewController.h" #import "YXEasing.h" #import "POP.h" #import "YXGCD.h" @interface RootVi

在Unity3D的Legacy动画系统中应用Root Motion

最近仔细比较了Unity3D目前版本中的两套动画系统:Legacy和Mecanim.Mecanim系统功能较之Legacy要强大很多,但是使用AnimatorController着实不方便(尽管使用AnimatorOverrideController可以避免重复编辑状态机),是因为游戏逻辑层面往往要用一个状态机或者类似的机制来控制角色的状态,而角色层面的状态逻辑和动画层面是无法一一对应的,两套复杂的状态机要配合起来...想想就觉得蛋疼啊!难怪很多朋友现在还在使用Legacy动画系统.Legacy

POP动画[2]

POP动画[2] 1:定制控制器间的转场动画. 源码有点多-_-!! // // RootViewController.h // Animation // // Copyright (c) 2014年 Y.X. All rights reserved. // #import <UIKit/UIKit.h> @interface RootViewController : UIViewController @end RootViewController.h // // RootViewContro

swift详解之二十七------------自定义UINavigationController的push和pop动画

自定义UINavigationController的push和pop动画 我们这里先创建一个简单的工程 , 在storyboard 中拖一个导航控制器 , rootViewController 改成我们的ViewController . 为了实现自定义动画切换 , 我们需要实现两个协议 . UIViewControllerAnimatedTransitioning,UINavigationControllerDelegate UIViewControllerAnimatedTransitioni

第三十八课:动画引擎的实现

本课将通过源码分析的形式,来教大家如何实现一个动画引擎的模块. 我们先来看一个使用CSS3实现动画倒带的例子: .animate {    //这个animate类名加在上面的那个方块元素中,这个类名也可以是其他名字,比如:.move,只要设置的是那个方块元素就OK了. animation-duration:3s; animation-name:cycle; animation-iteration-count:2;    //动画播放的次数 animation-direction: altern

Cocos2d-x学习笔记(十六)--------&gt;Cocos2d-x引擎中的网格地图

网格地图 2D游戏网格地图介绍: 在网格地图游戏中,地图由称为"瓷砖"(tile)的一小组图片相互排列组成.这些图片放在一个整体的网格中.得到一个令人信服的游戏场景.网格地图技术为开发者提供了很多便利,使用很少的网格图片元素,就可以组成非常大的场景地图,而且这些大场景并不会浪费硬件资源.而且根据网格元素的不同,可以得到多种多样的场景地图. 网格地图主要分为两大类: 第一类是90度网格地图(Orthogonal Tilemap),这类地图都是使用正方形或者长方形的瓷砖(Tile)组成的,