IOS动画库汇总

来源:互联网 发布:sai手绘软件下载 编辑:程序博客网 时间:2024/05/22 01:53

Core Animation笔记,基本的使用方法 - Core Animation笔记,基本的使用方法:1.基本动画,2.多步动画,3.沿路径的动画,4.时间函数,5.动画组。
awesome-ios-animation -
iOS Animation 主流炫酷动画框架(特效)收集整理 收集整理了下iOS平台下比较主流炫酷的几款动画框架。

awesome-animation - 在内的十多位童鞋们一起发起的一起动画开源组正式成立啦~Github组织名称:Animatious,这是我们第一期成员先前开源的一些动效库,我们的第一个合作开源项目正在紧锣密鼓的准备~请大家期待设计和代码的碰撞吧。
侧滑与右滑返回手势
SloppySwiper - iOS系统自带的UINavigationController要7.0才支持,但不过该手势只能从屏幕左侧边缘识别,如果要扩大到整个屏幕范围怎么办?配合一个SloppySwiper无需代码就可以轻松实现。此库支持iOS5.0以上版本(另外:Nav的title滑动不明显,本人写了2个类似的控件),
SloppySwiper-demo :代码方式与storyboard方式。
SCNavigation - UINavigation可以右滑返回,隐藏UINavigationBar。
UINavigationController-YRBackGesture - 支持右滑返回手势,标题栏不动。
GHSidebarNav - 现在比较流行使用侧开(侧滑)菜单设计。试了不少控件,感觉GHSidebarNav最成熟,尤其对纯代码创建的界面兼容性最好。
在Storyboard中使用GHSidebarNav侧开菜单控件。
iOS-Slide-Menu - 能够类似Facebook和Path那样弹出左右边栏侧滑菜单,还支持手势。多种可以自定义的属性 (非常不错)。

ECSlidingViewController - 侧滑菜单

JASidePanels - 侧滑菜单,有左右菜单,有pop功能,支持手势侧滑,本人使用中:简单。

animated-tab-bar - 让 Tabbar items能显示萌萌的动画。
tabbar图标动画 - tabbar上图标的动画实现,
源码推荐说明。
SideMenu - swift实现,一款带动画效果可定制 Slide Menu,可以学习其动画实现思路。P.S. 对于Hamburger式菜单,虽然很常用,不过,苹果并不鼓励使用,甚至有开发小组对其弊病用自家上线应用前后数据对比进行了抨击。
RESideMenu - 侧开菜单,qq类似。JHMenuTableViewDemo - 仿网易邮箱列表侧滑菜单。
SlideMenuView - 炫酷侧滑菜单布局框架,Android版本的一致实现。
QQConfiguration - swift,QQ-iPhone端框架,左侧菜单栏拖动手势。
KGFloatingDrawer - 侧滑菜单,qq类似,KyleGoddard/KGFloatingDrawer:一款适合于大屏手机或平板的浮动抽屉式导航界面组件。效果很赞- 侧开菜单,qq类似(与RESideMenu类似)。
AIFlatSwitch - 一款带平滑过渡动画的 Switch 组件类,类相同风格的 Menu/Back
HamburgerButton,类似相同风格的 Menu/Closehamburger-button.
JHChainableAnimations - 在应用中采用链式写出酷炫的动画效果, 使代码更加清晰易读,利用block实现的链式编程。WXGSlideMenuDemo - 个简单实现侧拉(侧滑)菜单的小demo,供初学者共同学习、练习使用。
PKRevealController - PKRevealController是一个可以滑动的侧边栏菜单(可向左、向右或者同时向两侧),只需手指轻轻一点(或者按一下按钮,但是这样滑动时不够炫酷),这类控制的其他库,而PKRevealController是最棒的。安装简便,高度定制且对手势识别良好。可以当做一个标准控件用在iOS SDK中。
SwiftPages - 高可定制类似 Instagram 视图滑动切换功能类库。API 简单、易用。
FlipBoardNavigationController - FlipBoardNavigationController。
MMDrawerController - 最多人用的一个有关侧边“抽屉”导航框架,里面还有很多你意想不到的交互效果,侧滑。
UIWebView翻页返回效果 - UIWebView翻页返回效果(变通方法)。
LLSlideMenu - 一个弹性侧滑菜单,弹性动画原理借鉴该项目中阻尼函数实现。
FlowingMenu.swift - 菜单如此出场方式(橡皮筋弹跳式动画)好玩又有趣。

gif动画

UIImageView-PlayGIF - UIImageView-PlayGIF。
YLGIFImage - YLGIFImage。
YLGIFImage-Swift - YLGIFImage-Swift。
gifu.Swift - gifu.Swift高性能GIF显示类库。
droptogif - droptogif视频拖拽到应用窗口后自动转换为 GIF 动画(其转换进程动画效果也超赞)。
JWAnimatedImage.swift - JWAnimatedImage.swift集中了目前主流的 GIF 显示库(如 FLAnimatedImage,Gifu 等)的优点,进行重构,代码短小精悍。而且使用了新的 frame 提取算法。

SwiftyGif - 高性能 Gif 播放引擎。
PHImageKit.swift - 出自 Product Hunter 开发小组的带下载、缓存的 GIF 播放组件库。使用简单又方便。

其他动画

popping - popping是一个POP 使用实例工程PopMenu - 用POP动画引擎写的Sina微博的Menu菜单。
MMTweenAnimation - facebook POP的自定义动画扩展(基于POPCustomAnimation) 提供10种函数式动画。
ZQLRotateMenu - 这是一个旋转视图的选择器。
CoolLoadAniamtion - 一个简单但是效果不错的loading动画。
SequenRotateAnimation - 一个简单的loading次序动画。
SYAppStart - App启动插画的自定义过度。
VJDeviceSpecificMedia -
如何根据设备选择不同尺寸的图片 可以通过设置不同尺寸设备的LaunchImage,来使得App适配这些设备,要是在不同不同尺寸设备上使用不同大小的图片,则需要在代码中一一判断,然后加载。
RMParallax - RMParallax是一个app启动页引导开源项目,除了细微的翻页视差效果,描述文本的过渡也非常美观(版本新特性、导航页、引导页)。
ADo_GuideView - 转动的用户引导页(模仿网易bobo) 因为没有从app包里抓到@3x的图片,建议在iPhone5模拟器运行,保证效果~ (版本新特性、导航页、引导页)。
CoreNewFeatureVC - 版本新特性(引导页),1.封装并简化了版本新特性启动视图!2.添加了版本的本地缓存功能,3.集成简单,使用方便,没有耦合度,4.支持block回调(版本新特性、导航页、引导页)。
MZGuidePages - 自己写的通用导航页,可以直接引入工程使用,请参考案例(版本新特性、导航页、引导页)。
Wizardry.swift - 可重用的方法和框架实现向导式用户界面管理。(版本新特性、导航页、引导页)。
ABCIntroView - ABCIntroView是一个易于使用的入门类,让你到达主屏幕之前介绍你的应用程序(版本新特性、导航页、引导页)。
Spring - Spring是一个Swift编写的开源库,可简化Swift编写的iOS动画。支持shake、pop、morph、squeeze、wobble、swing、flipX、flipY、fall、squeezeLeft、squeezeRight以及squeezeDown等多种动画形式,用 IBDesignable 让使用者可以在 Xcode 中快速设置动画效果。

KYBezierBounceView - 手势控制贝塞尔曲线,取消手势贝塞尔曲线会有反弹效果。

cadisplaylinkanduibezierpath - CADisplayLink结合UIBezierPath的神奇妙用。
KYCuteView - 实现类似QQ消息拖拽消失的交互+GameCenter的浮动小球效果,
分析。
KYWaterWaveView - 一个内置波浪动画的UIView,里面有鱼跳跃水溅起来的效果。
WaveLoadingView - iOS 唯一完美的波浪进度加载指示器,
实现说明。
KYPingTransition - 实现圆圈放大放小的转场动画,可以根据自己的需要使用Paper中的弹性效果,有Material风格。
KYNewtonCradleAnimiation - 牛顿摆动画。
LayerPlayer - 一款全面展示核心动画 API 示例项目(上架应用)。包括 CALayer, CAScrollLayer, CATextLayer, AVPlayerLayer, CAGradientLayer, CAReplicatorLayer, CATiledLayer, CAShapeLayer, CAEAGLLayer, CATransformLayer, CAEmitterLayer 等使用的互动演示。
JGTransitionCollectionView - swift,基于集合视图扩展实现完成自动布局及单元项 Flip式动画效果(效果很赞)。组件使用方便、自然(只需设置集合视图数据源的标准方式即可)。
KYShareMenu - 带弹性动画的分享菜单。
Context-Menu.iOS - 可以为app的菜单添加漂亮的动画内容,可自定义icon,并可根据自己的喜好设计单元格和布局。
DeformationButton - 一个简单的变换形状动画按钮。
UnReadBubbleView - UnReadBubbleView是一个能够拖拽并拉长的气泡视图。拖拽到一定的长度会消失,可以通过系数设置来控制拖拽的长度。气泡也支持多种属性设置。
PPDragDropBadgeView - 实现了类似于QQ 5.0 水滴拖拽效果. 支持iOS 5.0+ ARC,气泡能够带有数字标识,同时支持消失block方法。消失时还带有消失效果动画。
GiftCard-iOS - 礼品卡购买的炫酷动画。SDCycleScrollView - 无限循环自动图片轮播器(一步设置即可使用)。
HYBLoopScrollView - HYBLoopScrollView实现自动循环滚动,一般用于展示广告页。微信在贴纸宣传处就使用了轮播。
BuildAnInfiniteCarousel - 自己动手造无限循环图片轮播,教程。
iCarousel - iCarousel是一个类,它继承于UIView。用于简化实现各种类型的旋转木马(分页滚动视图),无限轮播 ,
iOS开发之多图片无缝滚动组件封装与使用。
KIPageView - 无限循环PageView,横向TableView,无限轮播。
简单实用的无限循环轮播图 - 简单实用的无限循环轮播图 。
CPInfiniteBanner - 是一个循环播放的组件,可以左右无缝滑动,3个imageview实现。
高效图片轮播,两个ImageView实现。
XTLoopScroll - 用两个 timer 三个重用的 view 实现无限循环 scrollView,1自动轮播 2点击监听回调当前图片 3手动滑动后重新计算轮播的开始时间, 良好的用户体验。
HotGirls - 卡片动画。
tispr-card-stack - swift 卡片风格动画切换组件及完整交互示例。
ZLSwipeableViewSwift - swift 卡片堆叠效果的实现(ZLSwipeableView)】可实现类似Tinder和Potluck应用程序的卡片堆叠效果,该项目基于
ZLSwipeableView objective-c实现。1.自定义动画。2.自定义滑动切换。3.自定义方向。4.撤销。
Koloda - 基于卡片的 Tinder-style 动画效果示例。精细绝人。更赞的是额外附了详细开发教程 How We Built Tinder-Like Koloda Animation in Swift 网页链接 。Yalantis 出品动画程序款款精品。

QQPersonalInfoTransition - 仿照QQ的转场。
KYAnimatedPageControl - 除了滚动视图时PageControl会以动画的形式一起移动,点击目标页还可快速定位。支持两种样式:粘性小球和旋转方块。
KDIntroView - swift 动态介绍视图框架及演示。另外两个相似的类库是 RazzleDazzle和 Presentation,择需使用。
RazzleDazzle - 【IFTTT开源Swift编写的帧动画框架--RazzleDazzle】RazzleDazzle 是IFTTT开源的一个iOS帧动画框架,非常适用于APP初次使用时的介绍和引导信息。JazzHands是UIKit一个简单的关键帧基础动画框架,可通过手势、scrollview、KVO等控制动画,被IFTTT应用在IFTTT for iPhone上。
Presentation - 一个类似RazzleDazzle的框架。
FillableLoaders - 基于 CGPaths 可定制个性化填空式装载类库。附水波上涨式示例。
SXWaveAnimate - 实现非常美观的灌水动画。
LSPaomaView - 可循环滚动的较长文字,跑马灯,效果很好,一句话集成。
SIFloatingCollection_Swift - 可定制的 Apple Music 风格浮动形状动画组件及演示。
Cheetah - 易用、高可读链式动画类库。另一个类似类库是
DKChainableAnimationKit。
CKWaveCollectionViewTransition - swift, UICollectionViewController之间切换的动画。
TKSubmitTransition - 基于 UIButton 的登录加载、返回按钮转场动画组件及示例。
ARAnimation - ARAnimation 对 Core Animation 进行了封装, 帮助 iOS 开发者能更加便捷的在项目中使用动画。
CardsAnimationDemo - swift,
《使用 UICollectionView 实现的一个卡片动画》不是直接操作所有 UIView 和 CALayer 的 transform3D 属性来实现整个效果的,而是使用 UICollectionView 来完成所有的视图管理和实现。
TKRubberIndicator.swift - 一个很不错的 page control。渐变特效文字 - 做了一个仿iPhone的移动滑块来解锁的渐变特效文字,还有一个类似ktv歌词显示的文字特效。
TTGEmojiRate.swift - TTGEmojiRate.swift以Emoji表情为基础绘图,
Swift开源项目: TTGEmojiRate的实现。
HYAwesomeTransition - 模仿格瓦拉的转场效果。CardAnimation.swift - CardAnimation 是国人开发的一个用 Swift 实现卡片垂直翻转动画的 Demo,
实现思路。
TaskSwitcherDemon - 是仿造iOS9的Task Switcher做出来的动画效果, 具体的实现思路可参照
这篇文章。
CoreAnimationCode.swift - 提供了 "iOS Core Animation Advanced Techniques" 书籍中的代码实例, 方便开发者们进行参考学习。
UIViewXXYBoom.swift - 一个炫酷好玩的爆炸效果,
如何实现这个效果。
ZLSwipeableViewSwift -
ZLSwipeableView - ZLSwipeableViewSwift在Tinder and Potluck中的动画效果实现思路(连续卡片翻页效果),最贴心的是作者提供了OC和Swift两个版本来供开发者使用,非常丝滑顺畅的效果。
RYCuteView - 用UIBezierPath实现果冻效果。 教程
IBAnimatable.swift - 第三方开源库IBAnimatable可以帮助我们在Interface Builder和Swift Playground里面设计UI, 交互, 导航模式, 换场和动画。整个App 都是通过 IBAnimatable 在Interface Builder 设计完成,没有任何一行代码。
MotionMachine.swift - 功能强大、优雅、模块化动画库。
circle-menu.swift - 动画效率很赞的圆形缩放菜单演示及类库。
BWWalkthrough.swift - BWWalkthrough.swift界面切换中加入灵动的动画效果。
hamburger-button.swift - hamburger-button.swift一个汉堡包动画关闭按钮。
HamburgerButton.swift - HamburgerButton.swift一个汉堡包动画返回按钮。
MDCSwipeToChooseView - MDCSwipeToChooseView翻牌子效果。
STLBGVideo - STLBGVideo让您的视图控制器的自定义backgroundvideo,
实现说明1、
实现说明2。
Advance.swift - 简单易用、功能强大的动画框架库。在手势交互、帧动画、自定义动画及仿真类型将是不错的选择。
PanelDemo - 仪表盘,模拟汽车的车速仪表盘,
一些简单的数学知识。
HWAnimationTransition_Swift 、

HWAnimationTransition_OC - 类似于格瓦拉启动页中的放大转场动画(objective-C && Swift)。
教程
MYBlurIntroductionView - 方便好用的引导类库,在App注册登录页面可以用到。
ZFCityGuides - 实现City Guides的动画效果,数字动态变化的动画效果。
NumberMorphView.swift - 可爱的数字补间(变身)动画类库。
DisplaySwitcher.swift - 两个集合视图在不同布局(平铺和列表)间平滑切换。Yalantis 出品。
DynamicButton.swift - 一套完整、且带动画过渡的图标按钮库。
TKDotSegment.swift - 是一个带有圆点动画的 segment。
LiquidLoader.swift - 液态加载动画的轻量级 UI 组件。
15DaysofAnimationsinSwift - 15DaysofAnimationsinSwift动画。
Interpolate.swift - 手势驱动交互式转场动画框架库。这个很专业,且非常有意思。
INPopoverController - OS X可自由定制的 Popover 视图。
WZXJianShuPopDemo - 仿简书、淘宝等等的View弹出效果,已封装好,使用简单。
实现原理
PeekPop.swift - 3DTouch动画组件。
fantastic-ios-animation.swift - 基于 UI 组件类别分类,且带精彩动画效果的 iOS 组件库集合。
pop - facebook出品的非常赞的动画引擎。



MBProgressHUD

Jonathan George

star:9150

MBProgressHUD + Customizations http://www.bukovinski.com/

SVProgressHUD

Transit App

star:6399

A clean and lightweight progress HUD for your iOS app. http://samvermette.com/199

FlatUIKit

Grouper

star:6362

A collection of awesome flat UI components for iOS.

iCarousel

Nick Lockwood

star:5931

A simple, highly customisable, data-driven 3D carousel for iOS and Mac OS http://www.charcoaldesign.co.uk/source/cocoa#icarousel

Shimmer

Facebook

star:5867

An easy way to add a simple, shimmering effect to any view in an iOS app.

PNChart

Kevin

star:5389

A simple and beautiful chart lib used in Piner and CoinsMan for iOS

RESideMenu

Roman Efimov

star:5224

iOS 7/8 style side menu with parallax effect.

SWTableViewCell

Christopher Wendel

star:5077

An easy-to-use UITableViewCell subclass that implements a swippable content view which exposes utility buttons (similar to iOS 7 Mail Application)

JVFloatLabeledTextField

Jared Verdi

star:4776

UITextField subclass with floating labels - inspired by Matt D. Smith's design: http://dribbble.com/shots/1254439--GIF-Mobile-Form-Interaction?list=users

10 JazzHands

IFTTT

star:4649

A simple keyframe-based animation framework for UIKit. Perfect for scrolling app intros. http://ifttt.github.io

11 Chameleon

Vicc Alexander

star:4575

Flat Color Framework for iOS (Obj-C & Swift)

12 AwesomeMenu

Jiangang Zhu

star:4397

Path 2.0 menu using CoreAnimation :) https://github.com/levey/AwesomeMenu

13 popping

André Schneider

star:4017

A collection of animation examples for iOS apps.

14 ECSlidingViewController

ECSlidingViewController

star:3979

Customizable sliding view controller container.

15 SVPullToRefresh

Sam Vermette

star:3736

Give pull-to-refresh & infinite scrolling to any UIScrollView with 1 line of code. http://samvermette.com/314

16 FXBlurView

Nick Lockwood

star:3623

UIView subclass that replicates the iOS 7 realtime background blur effect, but works on iOS 5 and above.

17 SWRevealViewController

John Lluch Zorrilla

star:2959

A UIViewController subclass for presenting side view controllers inspired on the FaceBook and Wunderlist apps, done right!

18 JBChartView

Jawbone

star:2866

iOS-based charting library for both line and bar graphs.

19 CRToast

Collin Ruffenach

star:2848

A modern iOS toast view that can fit your notification needs

20 VCTransitionsLibrary

Colin Eberhardt

star:2785

A collection of iOS7 animation controllers and interaction controllers, providing flip, fold and all kinds of other transitions.

21 CBStoreHouseRefreshControl

Suyu Zhang

star:2771

Fully customizable pull-to-refresh control inspired by Storehouse iOS app

22 PaperFold-for-iOS

honcheng

star:2668

Paper folding animation for iOS

23 MCSwipeTableViewCell

Ali Karagoz

star:2664

Convenient UITableViewCell subclass that implements a swippable content to trigger actions (similar to the Mailbox app).

24 twui

Twitter, Inc.

star:2617

A UI framework for Mac based on Core Animation

25 Atlas-iOS

Layer

star:2566

Atlas is a library of native iOS communications user interface components for Layer. http://atlas.layer.com

26 REFrostedViewController

Roman Efimov

star:2454

iOS 7/8 style blurred view controller that appears on top of your view controller.

27 MGSwipeTableCell

Imanol Fernandez

star:2441

An easy to use UITableViewCell subclass that allows to display swippable buttons with a variety of transitions.

28 AQGridView

Jim Dovey

star:2414

A grid view for iPhone/iPad, designed to look similar to NSCollectionView. http://quatermain.tumblr.com/

29 M13ProgressSuite

Brandon McQuilkin

star:2411

A suite containing many tools to display progress information on iOS.

30 EAIntroView

Evgeny Aleksandrov

star:2348

Highly customizable drop-in solution for introduction views.

31 PSTCollectionView

Peter Steinberger

star:2329

Open Source, 100% API compatible replacement of UICollectionView for iOS4.3+ http://petersteinberger.com

32 Chameleon

Sean Heber

star:2319

Chameleon is a port of Apple's UIKit for iOS (and some minimal related frameworks) to Mac OS X. http://chameleonproject.org/

33 GMGridView

Gulam Moledina

star:2276

A performant Grid-View for iOS (iPhone/iPad) that allows sorting of views with gestures (the user can move the items with his finger to sort them) and pinching/rotating/panning gestures allow the user to play with the view and toggle from the cellview to a fullsize display.

34 SIAlertView

Sumi Interactive

star:2212

An UIAlertView replacement with block syntax and fancy transition styles.

35 CHTCollectionViewWaterfallLayout

Nelson

star:2139

The waterfall (i.e., Pinterest-like) layout for UICollectionView.

36 JHChainableAnimations

Jeff Hurray

star:2122

Easy to read and write chainable animations in Objective-C

37 CMPopTipView

Chris Miles

star:2088

Custom UIView for iOS that pops up an animated "bubble" pointing at a button or other view. Useful for popup tips. https://github.com/chrismiles/CMPopTipView

38 MRProgress

Marius Rackwitz

star:2059

Collection of iOS drop-in components to visualize progress

39 NJKWebViewProgress

Satoshi Asano

star:2034

UIWebView progress interface

40 LTNavigationBar

Leo

star:2021

UINavigationBar Category which allows you to change its appearance dynamically

41 FoldingTabBar.iOS

Yalantis

star:2016

Folding Tab Bar and Tab Bar Controller https://yalantis.com

42 Chameleon

Peter Steinberger

star:2004

open source implementation of Twitter/iPad stacked ui - done right. http://twitter.com/steipete

43 RNFrostedSidebar

Ryan Nystrom

star:1987

A Control Center-esque control with blurred background and toggle animations.

44 VBFPopFlatButton

Victor Baro

star:1982

Flat button with 9 different states using POP

45 REMenu

Roman Efimov

star:1973

Dropdown menu inspired by Vine.

46 iOS-blur

César Pinto Castillo

star:1934

Blur a UIView

47 ZLSwipeableView

Zhixuan Lai

star:1879

A simple view for building card like interface inspired by Tinder and Potluck.

48 BEMSimpleLineGraph

Boris-Em

star:1859

Elegant Line Graphs for iOS (charting library)

49 MPFoldTransition

Mark Pospesel

star:1816

Easily add custom folding and page-flipping transitions to UIViews and UIViewControllers http://markpospesel.com/2012/05/07/mpfoldtransition/

50 AMWaveTransition

Andrea Mazzini

star:1807

Custom transition between viewcontrollers holding tableviews?



1. canvas

2. pop

3. lottie

4. spine


拿 Canvas 来和 Pop 比其实不大合适,虽然两者都自称「动画库」,但是「库」这个词的含义有所区别。本质上 Canvas 是一个「动画合集」而 Pop 是一个「动画引擎」。

先说 Canvas。Canvas 的目的是「Animate in Xcode Without Code」。开发者可以通过在 Storyboard 中指定 User Defined Runtime Attributes 来实现一些 Canvas 中预设的动画,也就是他网站上能看到的那些。但是除了更改动画的 delay 和 duration 基本上不能调整其他的参数(网站上有写未来准备支持不过都五个月了……)

我们来考虑一个 bounce left 的动画,其实无外乎就是某个物体从右到左再小幅震荡然后停止的过程。Canvas 里是这么做的:
+ (void)performAnimationOnView:(UIView *)view duration:(NSTimeInterval)duration delay:(NSTimeInterval)delay {    // Start    view.transform = CGAffineTransformMakeTranslation(300, 0);    [UIView animateKeyframesWithDuration:duration/4 delay:delay options:0 animations:^{        // End        view.transform = CGAffineTransformMakeTranslation(-10, 0);    } completion:^(BOOL finished) {        [UIView animateKeyframesWithDuration:duration/4 delay:0 options:0 animations:^{            // End            view.transform = CGAffineTransformMakeTranslation(5, 0);        } completion:^(BOOL finished) {            [UIView animateKeyframesWithDuration:duration/4 delay:0 options:0 animations:^{                // End                view.transform = CGAffineTransformMakeTranslation(-2, 0);            } completion:^(BOOL finished) {                [UIView animateKeyframesWithDuration:duration/4 delay:0 options:0 animations:^{                    // End                    view.transform = CGAffineTransformMakeTranslation(0, 0);                } completion:^(BOOL finished) {                                    }];            }];        }];    }];}

没有任何特别之处(除了 callback 嵌套得有点壮观)。但是对于一般开发者来说最头痛的大概就是调动画里的参数,Canvas 直接把参数写死,虽然效果略为生硬,对动画苦手来说还是有帮助的。

而 Canvas 的 components 也差不多,通过在 Storyboard 中指定属性来自定义字体或者是毛玻璃背景(通过插 UIToolbar 来实现的,比较粗糙)等效果。其实也就是省了几行代码的事——当然这也正是它所追求的。

Pop 就不一样了。如果说 Canvas 是对 Core Animation 的封装,Pop 则是对 Core Animation(以及 UIDynamics)的再实现。

为什么要再实现?回到 2010 年 Mike Matas 和 Kimon Tsinteris 创办 Push Pop Press 时。那时(其实一直到 iOS 7 之前都是)Core Animation 只能做所谓的「静态动画」——系统只提供了四种时间函数:线性、慢入、慢出、慢入慢出。要用这些模拟现实世界的物理交互是很麻烦的。现实的交互就像 Apple 已经实现好的 UIScrollView:拉到头了还能再拉一段然后松手后弹回去,轻轻一划松手后会自动滑动一段距离之后慢慢停下来。Kimon Tsinteris 在 Introducing Pop, the animation engine behind Paper 里说到,触屏使得操作更加直接,因此也让人们对屏幕这个媒介的期待更高:如果一个物体能响应我的点按,它也需要能响应我的轻轻一划。

但是很遗憾,苹果并没有公开他们用于实现 UIScrollView 的技术。大家可能不大好想象一个没有「弹性」的 scroll view 是什么样,刚好 Ole Begemann 前段时间自己重制了一个。在Understanding UIScrollView 这篇文章末尾的图片中可以看到,这是一个松手即停,到头即无法再拖动的 scroll view。

而 Kimon 他们希望在 Push Pop Press 里的每一个元素都能有像 UIScrollView 一样的体验。于是他们创造了一个自己的动画引擎,在这个引擎里需要加入两种额外的动画效果:Spring(弹性)和 Decay(衰减)。后来在开发 Paper 的时候他们又进一步完善了这个引擎,便是我们现在看到的 Pop。

举个例子,同样一个 bounce left 的效果,在 Pop 中是这样实现的:
POPSpringAnimation *animation = [POPSpringAnimation animation];animation.property = [POPAnimatableProperty propertyWithName:kPOPLayerTranslationX];animation.fromValue = @300.0;animation.toValue = @0.0;animation.springBounciness = 10.0;animation.springSpeed = 12.0;[view.layer pop_addAnimation:animation forKey:@"pop"];

Pop 语法上和 Core Animation 相似,效果上则不像 Canvas 那么生硬(时间四等分,振幅硬编码)。这使得对 Core Animation 有了解的程序员可以很轻松地把原来的「静态动画」转换成「动态动画」。

同时 Pop 又往前多走了一步。既然动画的本质是根据时间函数来做插值,那么理论上任何一个对象的任何一个值都可以用来做插值,而不仅仅是 Core Animation 里定死的那一堆大小、位移、旋转、缩放等 animatable properties。比如说某个标签的文字颜色要从黄色渐变成紫色,之前在 Core Animation 里无法做到,而通过 Pop 则可以自定义一个属性来较为轻松地实现。又或者说同样是动态更改一个 view 的大小,之前只能更改它的 frame,而现在可以更改 Auto Layout 的 constraints,对于使用 Auto Layout 的人来说这是更直观的做法。

当然使用 Pop 的问题就在于对交互设计师的要求更高了。一个弹性动画要有多「弹」,一个衰减动画要以什么样的速度衰减,什么样的动画让用户觉得恰到好处不喧宾夺主,这都是设计师需要考虑的问题。Mike Matas 的厉害之处正在这里。
原创粉丝点击