测试已测试 | ✓ |
Lang语言 | Obj-CObjective C |
许可证 | MIT |
发布最后发布 | 2015年11月 |
由 Devin Foley,Jonathan Hersh,Laura Skelton 维护。
Jazz Hands 是一个基于关键帧的 UIKit 动画框架。动画可以通过手势、滚动视图、KVO 或 ReactiveCocoa 来控制。
Jazz Hands 在 IF 和 DO by IFTTT 的 iPhone 和 iPad 应用程序中广泛使用,最著名的应用是在应用简介中。
打开 JazzHandsDemo.xcworkspace
来查看在滚动应用简介中移动、缩放、淡化和转换视图的简单演示。
要运行示例项目,克隆仓库,并从 Example
目录运行 pod install
正在寻找将 Jazz Hands 集成到您的 Swift 项目中?查看我们全新重新构想的基于 Swift 的滚动关键帧动画库 RazzleDazzle
。
您也可以直接将 JazzHands
文件夹的内容复制到您的项目中。
首先,将 JazzHands
添加到您的 UIViewController。
#import <IFTTTJazzHands.h>
现在,创建一个 Animator 来管理这个 UIViewController 中的所有动画。
@property (nonatomic, strong) IFTTTAnimator *animator;
// later...
self.animator = [IFTTTAnimator new];
为要动画化的视图创建一个动画。可以为视图应用多种类型的动画。在示例中,我们将使用 IFTTTAlphaAnimation
,它将使视图淡入和淡出。
IFTTTAlphaAnimation *alphaAnimation = [IFTTTAlphaAnimation animationWithView: viewThatYouWantToAnimate];
将动画注册到 animator。
[self.animator addAnimation: alphaAnimation];
向动画中添加一些关键帧。我们将在这 30 到 60 的时间间隔内使这个视图淡出。
[alphaAnimation addKeyframeForTime:30 alpha:1.f];
[alphaAnimation addKeyframeForTime:60 alpha:0.f];
现在,要动画化视图,告诉 animator 当前时间。例如,要将此动画与 UIScrollView 绑定,在滚动视图的代理方法中通知 animator 时间。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
[super scrollViewDidScroll:scrollView];
[self.animator animate:scrollView.contentOffset.x];
}
这将产生一种效果,其中视图将在 0 到 30 的滚动位置完全淡入并可见。在 30 到 60 的滚动位置之间,视图将淡出到不可见,并且将在大于 60 的滚动位置保持淡出状态。
Jazz Hands 支持几种动画类型
alpha
属性 (创建淡入淡出效果)。backgroundColor
属性。layer.cornerRadius
属性。hidden
属性 (隐藏和显示视图)。layer.transform
属性 (用于3D转换)。UILabel
的 textColor
属性。CAShapeLayer
的 fillColor
属性。CAShapeLayer
的 strokeStart
属性 (不与 IFTTTStrokeEndAnimation 一起使用)。CAShapeLayer
的 strokeEnd
属性 (不与 IFTTTStrokeStartAnimation 一起使用)。UIView
的 layer.position
属性。AutoLayout
约束常量。AutoLayout
约束常量,将其作为另一视图属性的倍数 (根据另一个视图的大小来偏移或调整视图大小)。AutoLayout
约束常量,将视图放置在滚动视图页面上 (使用 AutoLayout 在 scrollView 上定位视图)。frame
属性 (移动和调整视图大小。不兼容 AutoLayout)。JazzHands 的 IFTTTAnimatedPagingScrollViewController
中的 keepView:onPage:
方法是一个超级简单的方式来布局分页滚动视图,当您的应用旋转或用于 iOS9 的新分割屏幕 iPad 视图中时,它会如您预期的那样工作,这是一个非常棘手的部分,以便使您的应用完全准备好 AutoLayout。 JazzHands
为您设置了一个友好的 AutoLayout 的分页滚动视图控制器,所有您需要做的就是通知 JazzHands
您想放在哪个页面上。
作为一个额外的奖励,因为它是建立在动画库的基础上,您甚至可以告诉 JazzHands
您想让您的一些视图出现在多个页面上,而其他视图则滚动过去,只需调用一次 keepView:onPages:
。
要查看新的 JazzHands 2.0 AutoLayout 魔法如何运作,请查看示例项目。
假设您想要根据UITableView的滚动偏移量执行某些动画,但您不希望成为该表的代理?ReactiveCocoa正是为此而设计的。
[RACObserve(self.tableView, contentOffset) subscribeNext:^(NSValue *value) {
CGFloat y = self.tableView.contentOffset.y;
[self.animator animate:y];
}];
或者,也许您想要根据另一个视图的位置动画化一些视图?Jazz Hands 与 KVO 工作得很好。
- (void)viewDidLoad
{
[self.viewToMirror addObserver:self
forKeyPath:@"frame"
options:NSKeyValueObservingOptionInitial
context:nil];
}
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
if ([keyPath isEqualToString:@"frame"]) {
[self.animator animate:CGRectGetMinY(self.viewToMirror.frame)];
} else {
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}
Jazz Hands 足够灵活,可以接受来自许多不同类型源的时间输入,包括 UIGestureRecognizer
。
- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer
{
[self.animator animate:[recognizer locationOfTouch:0 inView:self.view].x];
}
动画器一次只能处理一个视图一个类型的动画。如果要在视图上使用相同类型的多个动画,请使用关键帧。
IFTTTFrameAnimation 与 AutoLayout 或任何约束动画不兼容。
想要在 Android 上构建如 JazzHands 的一般键帧动画库?请查看 SparkleMotion
。
git checkout -b my-new-feature
)git commit -am '添加一些功能'
)git push origin my-new-feature
)版权所有2015 IFTTT Inc.