初步探索Facebook程序员开发的POP动画库

最近工作中需要做一些关于动画的功能,虽然功能本身不会运用到POP动画,但是在敲代码的时候想到了之前想要调研的facebook程序员开发的引擎级别的POP动画框架,闲下来的时候琢磨了一下,发现这个库功能非常强大,对于App**逼格**提升有很大帮助.
第一次看POP实现的动画时感觉很像Foundation框架自带的CoreAnimation动画,但仔细看了相关资料和自己实践了几个Demo之后,感觉POP相对于CoreAnimation级别的动画来讲实现的效果更佳细腻,而且支持自定义属性,前边说到是引擎级别,因为库中加入了很多物理学相关的属性可供使用.

使用:
一. 导入:
1.可以使用cocoaPod来导入POP库,在pod中写入
pod 'pop', '~> 1.0'
然后
pod install
2. 直接把库文件放入工程文件夹,这种方式需要在使用POP的类中导入头文件#import POP/POP.h,Swift版本需要创建bridge.h文件,并在bridge.h中引入POP库

二. 使用:
POP库提供了四种动画形式:
一. Basic动画:

    @IBAction func basicButton(sender: AnyObject) {
        //创建POPBasic对象 propertyName是需要修改的属性名称
        let basicAnimate = POPBasicAnimation.init(propertyNamed: kPOPLayerCornerRadius)
        //fromValue,toValue分别是动画的起始位置和目标位置的值
        //如果需求换成水平移动 那么需要改变的参数为: propertyName,fromValue,toValue.
        //fromValue如果不设置 默认为要改变的属性的初始值
        basicAnimate.fromValue = 0.0
        basicAnimate.toValue = self.animationView.bounds.width/2.0
        //repeatCount 重复次数
        basicAnimate.repeatCount = 2
        //duration 动画的持续时长
        basicAnimate.duration = 2
        //这里的timingFunction是指动画的线性属性 比如先快后慢,先慢后快
        basicAnimate.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
        //把POPBasic对象添加到View上
        self.animationView.pop_addAnimation(basicAnimate, forKey: "basicCornerRadius")
    }

二.
Spring动画(非常酷炫)

 @IBAction func springButton(sender: AnyObject) {

        let springAnimation = POPSpringAnimation(propertyNamed: kPOPLayerCornerRadius)
        //velocity 添加动画的速度 也可以理解为力度
        springAnimation.velocity = 10
        //springBounciness 动画的弹力属性 这个属性给动画提供了欠阻尼效果
        springAnimation.springBounciness = 10
        // spring动画还有很多物理学相关的属性 例如拉力,摩擦力,重力 这些会在下一次文档中实现
        self.animationView.pop_addAnimation(springAnimation, forKey: "springAnimation")
    }

三: decay动画

@IBAction func decayButton(sender: AnyObject) {

        let decayAnimiation = POPDecayAnimation(propertyNamed: kPOPLayerCornerRadius)
        //decay动画的持续时间同样是动态计算得到的
        //deceleration是decay动画中比较重要的属性 它提供了与spring动画相反的过阻尼效果
        decayAnimiation.deceleration = 10
        //提供动画的初始值,目标值
        decayAnimiation.fromValue = 0
        decayAnimiation.toValue = self.animationView.bounds.width/2
        self.animationView.pop_addAnimation(decayAnimiation, forKey: "decayAnimation")

    }

大家会注意在把动画效果添加到view上的时候,会有一个key
我们可以对这个key进行操作,比如:

self.animationView.pop_removeAnimationForKey("springAnimation")

或者通过removeAll来把整个页面的POP动画效果移除

那么通过POP动画能够修改那些属性呢?
这里是库里给出的list:

/**
 Common CALayer property names.
 */
public let kPOPLayerBackgroundColor: String
public let kPOPLayerBounds: String
public let kPOPLayerCornerRadius: String
public let kPOPLayerBorderWidth: String
public let kPOPLayerBorderColor: String
public let kPOPLayerOpacity: String
public let kPOPLayerPosition: String
public let kPOPLayerPositionX: String
public let kPOPLayerPositionY: String
public let kPOPLayerRotation: String
public let kPOPLayerRotationX: String
public let kPOPLayerRotationY: String
public let kPOPLayerScaleX: String
public let kPOPLayerScaleXY: String
public let kPOPLayerScaleY: String
public let kPOPLayerSize: String
public let kPOPLayerSubscaleXY: String
public let kPOPLayerSubtranslationX: String
public let kPOPLayerSubtranslationXY: String
public let kPOPLayerSubtranslationY: String
public let kPOPLayerSubtranslationZ: String
public let kPOPLayerTranslationX: String
public let kPOPLayerTranslationXY: String
public let kPOPLayerTranslationY: String
public let kPOPLayerTranslationZ: String
public let kPOPLayerZPosition: String
public let kPOPLayerShadowColor: String
public let kPOPLayerShadowOffset: String
public let kPOPLayerShadowOpacity: String
public let kPOPLayerShadowRadius: String

/**
 Common CAShapeLayer property names.
 */
public let kPOPShapeLayerStrokeStart: String
public let kPOPShapeLayerStrokeEnd: String
public let kPOPShapeLayerStrokeColor: String
public let kPOPShapeLayerFillColor: String
public let kPOPShapeLayerLineWidth: String
public let kPOPShapeLayerLineDashPhase: String

/**
 Common NSLayoutConstraint property names.
 */
public let kPOPLayoutConstraintConstant: String

/**
 Common UIView property names.
 */
public let kPOPViewAlpha: String
public let kPOPViewBackgroundColor: String
public let kPOPViewBounds: String
public let kPOPViewCenter: String
public let kPOPViewFrame: String
public let kPOPViewScaleX: String
public let kPOPViewScaleXY: String
public let kPOPViewScaleY: String
public let kPOPViewSize: String
public let kPOPViewTintColor: String

/**
 Common UIScrollView property names.
 */
public let kPOPScrollViewContentOffset: String
public let kPOPScrollViewContentSize: String
public let kPOPScrollViewZoomScale: String
public let kPOPScrollViewContentInset: String
public let kPOPScrollViewScrollIndicatorInsets: String

/**
 Common UITableView property names.
 */
public let kPOPTableViewContentOffset: String
public let kPOPTableViewContentSize: String

/**
 Common UICollectionView property names.
 */
public let kPOPCollectionViewContentOffset: String
public let kPOPCollectionViewContentSize: String

/**
 Common UINavigationBar property names.
 */
public let kPOPNavigationBarBarTintColor: String

/**
 Common UIToolbar property names.
 */
public let kPOPToolbarBarTintColor: String

/**
 Common UITabBar property names.
 */
public let kPOPTabBarBarTintColor: String

/**
 Common UILabel property names.
 */
public let kPOPLabelTextColor: String

我们可以看到在对应不同控件,不同的层级都有相对应的属性可以使用,如果你想,你甚至可以使用POP库来创建出一个自定义的ScrollView.

总结:
POP动画库是一个非常值得研究的第三方库,如果上面三种效果还不能满足需求,我们可以尝试使用自定义属性.下篇文章中我会进行更多的尝试和探索.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值