本文共 3132 字,大约阅读时间需要 10 分钟。
iOS 动画库 Pop 和 Canvas 各自的优势和劣势是什么?
拿 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) { }]; }]; }]; }]; }
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"];
转载地址:http://nczuo.baihongyu.com/