RZTweenSpirit 0.1.0

RZTweenSpirit 0.1.0

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2014年12月

Nick DonaldsonMichael GorbachAlex Rouse维护。



  • 作者
  • Nick Donaldson 和 Alex Rouse

RZTweenSpirit

概述

RZTweenSpirit 是一个 iOS 库,可用于基于时间线变量的分段插值,适用于动画时间线。

什么是插值?

中间插值或插值是生成两个图像之间的中间帧的过程,以使第一幅图像平滑地演变到第二幅图像。中间帧是关键帧之间的绘图,有助于创建动作的错觉。插值是所有类型动画的关键过程,包括计算机动画。

维基百科

RZTweenSpirit 在脚本动画时间线时非常出色,但它还可以做很多事情。

让我们看看一个简单的例子

// Create an animator
RZTweenAnimator *tweenAnimator = [[RZTweenAnimator alloc] init];

// Use a float tween to animate the opacity of a label from 0 to 1 over 10 seconds with an eased-out curve
RZFloatTween *labelAlpha = [[RZFloatTween alloc] initWithCurveType:RZTweenCurveTypeSineEaseOut];
[labelAlpha addKeyFloat:0.0 atTime:0.0];
[labelAlpha addKeyFloat:1.0 atTime:10.0];
[tweenAnimator addTween:arrowAlpha forKeyPath:@"alpha" ofObject:self.titleLabel];

// Use a point tween to animate the center of the label between three points with a linear curve
RZPointTween *labelCenter = [[RZPointTween alloc] initWithCurveType:RZTweenCurveTypeLinear];
[labelCenter addKeyPoint:CGPointMake(100, 100) atTime:0.0];
[labelCenter addKEyPoint:CGPointMake(400, 100) atTime:6.0];
[labelCenter addKeyPoint:CGpointMake(200, 400) atTime:10.0];
[tweenAnimator addTween:labelCenter forKeyPath@"center" ofObject:self.titleLabel];

// You can set the time on the animator directly to jump immediately to the corresponding values in the timeline
// This is super useful for "scrubbing" the timeline in response to, say, a scrollview being scrolled
[tweenAnimator setTime:0];

// You can animate the timeline from its current point to another point
[tweenAnimator animateToTime:10.0];

// You can also animate to another point in a specific duration.
// It helps to think of "time" as more of an offset along the timeline than a specific instant measured in seconds.
[tweenAnimator animateToTime:10.0 overDuration:20.0]; // (half speed if starting at 0)

为什么不使用 CoreAnimation?

在许多情况下,CoreAnimation 可能比 RZTweenSpirit 是更好的选择。如果您需要一个可靠、经过验证的动画系统,CoreAnimation 一定是您的选择。但如果您正在寻找一种更具有表现力的方式来创建动画时间线,您可能会发现 RZTweenSpirit 非常有用!

需求

RZTweenSpirit 支持 iOS 7.0+。

安装

手动安装

Classes 目录中的所有文件复制到您的项目中。还需要连接到 QuartzCore,但应该通过文件头中使用框架模块隐式完成。

文档

入门

首先,导入 RZTweenSpirit.h 标头。然后,分配并初始化一个 RZTweenAnimator 实例,并在视图控制器或视图中将其保存在属性中

self.tweenAnimator = [[RZTweenAnimator alloc] init];

这就完成了,您现在可以开始制作一些插值动作了!

插值

实现 RZTween 协议的对象(以下称为“插值”)具有在时间线沿着特定点的返回值的简单能力。协议中只有两种方法

  • + (Class)valueClass;
    • 返回由此缓动生成的值所表示的类。这可以用于类型检查,像使用RZKeyFrameTween一样。
  • - (id)tweenedValueAtTime:(NSTimeInterval)time;
    • 为提供的时间返回valueClass返回的类型的一个值。

尽管名称如此,缓动不一定必须在不同值之间进行插值。它们可以为特定的时间范围简单地返回一个单个值。

注意:实现RZTween的类还必须实现NSCopying,因为它们将作为动画器内部字典中的键使用。

关键帧缓动

提供的RZTween的主要具体实现是RZKeyFrameTween,它提供了在时间线上的特定瞬间之间进行缓动,并可选使用缓动曲线的键帧值的工具。有关具体子类型,请参阅RZKeyFrameTweens.h,这些子类型对应于不同的数据类型。

  • CGFloat(包装在NSNumber中)
  • BOOL(包装在NSNumber中)
  • CGRect(包装在NSValue中)
  • CGPoint(包装在NSValue中)
  • UIColor

动画器

动画器是一个使用来管理驱使缓动的时间线的对象。它可以通过直接设置时间来异步“刮擦”时间线,或者将动画从时间线上的一个点移动到另一个点。

实现RZTween的对象可以通过两种方式之一注册到动画器中:KVC或基于块。

KVC方法接受一个keypath和一个keypath将修改的对象

[self.tweenAnimator addTween:myRectTween forKeypath:@"frame" ofObject:self.myView];

这也适用于CALayer转换keypaths,当使用分开的缓动时,它们仍然可以很好地一起工作

// Tween which represents rotation angle (around z-axis) in radians
[self.tweenAnimator addTween:myRotationTween forKeypath:@"transform.rotation" ofObject:self.myView.layer];

// Tween which represents translation as a CGPoint
[self.tweenAnimator addTween:myTranslationTween forKeypath:@"transform.translation" ofObject:self.myView.layer];

基于块的方法接受一个块,该块将接收缓动的引用和缓动的当前值

// Must use a weak self reference within these blocks to avoid a retain cycle, 
// if the animator is retained by self.
__weak typeof(self) weakSelf = self;

// Note that the second argument of the block can be cast upwards from id 
// to whatever type the tween returns as a value
[self.tweenAnimator addTween:myTween withUpdateBlock:^(id<RZTween> tween, NSNumber *value) {
    weakSelf.someConstraint.constant = [value floatValue]; // must unbox NSNumber/NSValue
    NSLog(@"Updated constraint constant to: %@", value);
}];

一旦注册了缓动,可以直接设置动画器的时间偏移量,或者将其动画到特定的时间点。

自定义缓动

因为RZTween协议以及整个RZTweenSpirit架构是动态类型的,你可以为任何东西创建缓动。

  • 字符串需要在时间线上不同点填充标签
  • 组成动画序列帧的图片
  • 更复杂的模型对象,表示屏幕上的数据

可能性是无限的!

完整文档

对于更完整的文档,请参阅CocoaDocs页面。

有关示例,请参阅示例项目。

许可

RZTweenSpirit遵循MIT许可。有关详细信息,请参阅LICENSE