[翻译] POP Facebook的动画开源库

Pop is an extensible animation engine for iOS and OS X. In addition to
basic static animations, it supports spring and decay dynamic animations,
making it useful for building realistic, physics-based interactions. The
API allows quick integration with existing Objective-C codebases and
enables the animation of any property on any object. It‘s a mature and
well-tested framework that drives all the animations and transitions
in Paper.

Pop是一个对iOS以及OS
X扩展的动画引擎。除了基础静态的动画,它支持弹簧类以及衰退的物理引擎效果的动画。对于你来创建出类似于物理引擎的交互十分方便。这个API能让你快速的集成到你已经存在的项目当中,允许你对任何对象的任何属性操作。他是个系统的,进行过反复测试的框架,在Paper应用中所有的动画均由Pop创建。

Installation

Pop is available on CocoaPods.
Just add the following to your project Podfile:

你可以使用CocoaPods安装:

pod ‘pop‘, ‘~> 1.0‘

Alternatively, you can add the project to your workspace and adopt the
provided configuration files or manually copy the files under the pop
subdirectory into your project. If installing manually, ensure the C++
standard library is also linked by
including -lc++ to your project linker flags.

另一种方式是:你可以将整个工程添加到你的workspace中然后引用需要的配置文件,或者是手动的复制pop文件夹到你的工程项目当中,确保你的项目中用
-lc++ 链接到C++标准库。

Usage

Pop adopts the Core Animation explicit animation programming model. Use
by including the following import:

Pop 采用了 Core Animation
明确的动画程勋模型,通过引入头文件来使用:

#import <POP/POP.h>

Start, Stop & Update

To start an animation, add it to the object you wish to animate:

为了给对象添加动画效果,使用如下:

POPSpringAnimation *anim = [POPSpringAnimation animation];
...
[layer pop_addAnimation:anim forKey:@"myKey"];

To stop an animation, remove it from the object referencing the key
specified on start:

为了停止动画,你可以从指定的key值,从对象移除掉:

[layer pop_removeAnimationForKey:@"myKey"];

The key can also be used to query for the existence of an animation.
Updating the toValue of a running animation can provide the most seamless
way to change course:

这个key值也可以用来查询已经存在的动画。更新 toValue
值可以无缝的更新动画的流程:

anim = [layer pop_animationForKey:@"myKey"];
if (anim) {
/* update to value to new destination */
anim.toValue = @(42.0);
} else {
/* create and start a new animation */
....
}

While a layer was used in the above examples, the Pop interface is
implemented as a category addition on NSObject. Any NSObject or subclass
can be animated.

上例中使用了一个layer,然而,Pop是通过对NSObject的category实现方式。任何的NSObject或者其只对象都能够使用动画。

Types

There are four concrete animation types: spring, decay, basic and
custom.

有着4种具体的动画类型:弹簧类型,衰退的物理引擎类型,基础类型以及定制类型。

Spring animations can be used to give objects a delightful bounce. In
this example, we use a spring animation to animate a layer‘s bounds from
its current value to (0, 0, 400, 400):

弹簧动画效果可以给对象一个很平滑的动画效果。使用如下例子所示:

POPSpringAnimation *anim = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerBounds];
anim.toValue = [NSValue valueWithCGRect:CGRectMake(0, 0, 400, 400)];
[layer pop_addAnimation:anim forKey:@"size"];

Decay animations can be used to gradually slow an object to a halt. In
this example, we decay a layer‘s positionX from it‘s current value and
velocity 1000pts per second:

类似于物理引擎的动画可以慢慢将一个对象从运动状态变为停止状态。使用如下例子所示:

POPDecayAnimation *anim = [POPDecayAnimation animationWithPropertyNamed:kPOPLayerPositionX];
anim.velocity = @(1000.);
[layer pop_addAnimation:anim forKey:@"slide"];

Basic animations can be used to interpolate values over a specified
time period. To use an ease-in ease-out animation to animate a view‘s
alpha from 0.0 to 1.0 over the default duration:

基本动画类型可以用来篡改一个指定的时间区域。使用如下例子:

POPBasicAnimation *anim = [POPBasicAnimation animationWithPropertyNamed:kPOPViewAlpha];
anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
anim.fromValue = @(0.0);
anim.toValue = @(1.0);
[view pop_addAnimation:anim forKey:@"fade"];

POPCustomAnimation makes creating custom animations
and transitions easier by handling CADisplayLink and associated time-step
management. See header for more details.

POPCustomAnimation 通过控制CADisplayLink以及与时间轴的管理,使得创建自定义动画以及转场更加的简单,你可以在头文件中浏览。

Properties

The property animated is specified by
the POPAnimatableProperty class. In this example we
create a spring animation and explicitly set the animatable property
corresponding to -[CALayer bounds]:

用来触发动画的类是POPAnimatableProperty。这个例子中,我们创建了一个弹簧动画,以及明确的设定了这个动画来响应-[CALayer
bounds]:

POPSpringAnimation *anim = [POPSpringAnimation animation];
anim.property = [POPAnimatableProperty propertyWithName:kPOPLayerBounds];

The framework provides many common layer and view animatable properties
out of box. You can animate a custom property by creating a new instance
of the class. In this example, we declare a custom volume property:

这个框架提供了很多种通用的layer以及可以被动画的view的属性。你可以通过创建一个实例来自定义一个可以动画的属性。以下例子提供了如何让音量属性动画改变:

prop = [POPAnimatableProperty propertyWithName:@"com.foo.radio.volume" initializer:^(POPMutableAnimatableProperty *prop) {
// read value
prop.readBlock = ^(id obj, CGFloat values[]) {
values[0] = [obj volume];
};
// write value
prop.writeBlock = ^(id obj, const CGFloat values[]) {
[obj setVolume:values[0]];
};
// dynamics threshold
prop.threshold = 0.01;
}];

anim.property = prop;

For a complete listing of provided animatable properties, as well more
information on declaring custom properties
see POPAnimatableProperty.h.

请参考POPAnimatableProperty.h来获取一份完整的可以提供动画完整的属性列表。

Debugging


Here are a few tips when debugging. Pop obeys the Simulator‘s Toggle
Slow Animations setting. Try enabling it to slow down animations and more
easily observe interactions.

Consider naming your animations. This will allow you to more easily
identify them when referencing them, either via logging or in the
debugger:

anim.name = @"springOpen";

Each animation comes with an associated tracer. The tracer allows you
to record all animation-related events, in a fast and efficient manner,
allowing you to query and analyze them after animation completion. The
below example starts the tracer and configures it to log all events on
animation completion:

POPAnimationTracer *tracer = anim.tracer;
tracer.shouldLogAndResetOnCompletion = YES;
[tracer start];

See POPAnimationTracer.h for more details.

Testing

Pop has extensive unit test coverage. To install test dependencies,
navigate to the root pop directory and type:

pod install

Assuming CocoaPods is installed, this will include the necessary OCMock
dependency to the unit test targets.

Resources

A collection of links to external resources that may prove
valuable:

Contributing

See the CONTRIBUTING file for how to help out.

License

Pop is released under a BSD License. See LICENSE file for details.

[翻译] POP Facebook的动画开源库,布布扣,bubuko.com

时间: 2024-08-04 05:23:07

[翻译] POP Facebook的动画开源库的相关文章

Android开发--Facebook酷炫开源库Shimmer使用

今天在上网的时候无意间看到了Facebook的Shimmer开源库,感觉很是酷炫,而且使用超方便,决定给大家介绍一下.Shimmer是Facebook提供的一项基于Java的library,它可以使Android中的所有View控件具有闪光的效果.该项目的GitHub项目托管地址,请猛戳https://github.com/facebook/shimmer-android 使用Shimmer 配置工程 首先,我们在GitHub上将该项目clone到本地: 接下来我们在Android studio

一些开源库分享 ---严焕培

1.1 UIImageCagegory图片处理 1.2 UIImageCagegoryGif动画图片处理 1.3 GIF动画 1.4 Base64编解码 1.5 科大讯飞语音识别 1.6 mp3/mp4播放 1.7 Reachability使用 1.8 AMR音频转码 1.9 JsonKit使用 1.10 MBProgressHUD 1.11 RTLabel 1.12 OC方便框架 1.13 OpenURL打电话-发短信-上网-邮件 1.14 群发短信API接口 1.15 OHAttribute

33 个 2017 年必须了解的 iOS/swift 开源库第三方库

本文翻译自Medium,原作者为 Pawe? Bia?ecki 照片版权:(Unsplash/Markus Pe) 你好,iOS 开发者们!我的名字叫 Pawe?,我是一个独立 iOS 开发者,并且是 Enter Universe 的作者. 接近两年前我发布了 27 个iOS开源库,让你的开发坐上火箭吧.这是我在这里最棒的文章了(根据 Medium 用户的反馈来看): 如果有 15.5 万人 很担心能否跨越网络上连山排海般的文字找到最棒的 iOS 开源库,那我来传递. 跟 33 个 pod 打个

Android开源库项目集锦

一.兼容类库 ActionBarSherlock : Action Bar是Android 3.0后才開始支持的,ActionBarSherlock是让Action Bar功能支持2.X后的全部平台.并且他会自己主动的推断是调用原生Action Bar还是使用扩展ActionBar. 在我的小熊词典里实用到这个库,并且非常多非常知名的App也在使用这个库.GitHub Official ActionBar科普 Android-ViewPagerIndicator : 这是与ViewPager兼容

iOS开发的库的列表,不完全是开源库

这个也是从他人的总结中COPY过来,加以整理的 iOS苹果官方Demo合集1.网页地址 2.官方地址 优质iOS UI/UE库:1.gitHub地址 [资源集合]94个iOS开发资源推荐 iOS开发的库的列表 项目管理和工具 测试:TestFlight 依赖管理:CocoaPods 自动生成推送证书:GeneratePushCerts AppStore统计:App Annie 单元测试:GHUnitIOS.OCMock 错误分析:Crashlytics 动态更新APP:JSPatch,WaxPa

iOS开源库源码解析之AsnycDispalyKit

来自Leo的原创博客,转载请著名出处 我的stackoverflow 前言 最近心血来潮,想研究下FaceBook的AsnycDispalyKit的源代码,学习一些界面优化的技术以及编码风格.这篇文章,会详细的记录下我认为对新手有用的部分.后面有空的时候,继续研究其他几个iOS开发很流行的库-AFNetworking,SDWebImage,MBProgressHud,Mantle等`.AsnycDisplayKit是一个非常庞大的库,所以我尽量捞干的讲. 关于AsyncDisplayKit 文档

GitHub Top 100的Android开源库

本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据GitHub搜索Java语言选择「Best Match」得到的结果,然后过滤了跟Android不相关的项目,所以排名并不具备任何官方效力,仅供参考学习,方便初学者快速了解当前一些流行的Android开源库. 1. React Native 这个是 Facebook 在 React.js Conf 2015 大会上推出的基于 JavaScript 的开源框架 React Native,

【开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位...

[转]http://www.tuicool.com/articles/jyA3MrU Android开源库 自己一直很喜欢Android开发,就如博客签名一样, 我是程序猿,我为自己代言 . 在摸索过程中,GitHub上搜集了很多很棒的Android第三方库,推荐给在苦苦寻找的开发者,而且我会 不定期的更新 这篇文章. Android下的优秀开发库数不胜数,在本文中,我列举的多是开发流程中最常用的一些.如果你还想了解更多的Android开源库,可以关注我的博客,每一个库都是我认真查看或者编译运行

C++开源库大全(转)

程序员要站在巨人的肩膀上,C++拥有丰富的开源库,这里包括:标准库.Web应用框架.人工智能.数据库.图片处理.机器学习.日志.代码分析等. 标准库 C++ Standard Library:是一系列类和函数的集合,使用核心语言编写,也是C++ISO自身标准的一部分. Standard Template Library:标准模板库 C POSIX library : POSIX系统的C标准库规范 ISO C++ Standards Committee :C++标准委员会 框架 C++通用框架和库