zoukankan      html  css  js  c++  java
  • Pop–实现任意iOS对象的任意属性的动态变化

    pop

    简介

    Pop 是一个可扩展的动画引擎,可用于实现任意iOS对象的任意属性的动态变化,支持一般动画,弹性动画和渐变动画三种类型.

    • 项目主页: pop

    • 最新示例: 点击下载

    • 注意: 官方代码中,并不包含实例,而是用于编译的所有源代码,建议自行新建工程,并结合下文的代码片段查看效果.

    入门

    安装

    通过CocoaPods安装

    pod 'pop', '~> 1.0'

    使用

    在需要使用POP的地方,引入头文件:

    #import <pop/POP.h>

    动画的开始,停止 与 更新

    把动画添加到你想要拥有动态变化的对象上面,即可开始动画:

    POPSpringAnimation *anim = [POPSpringAnimation animation];
    ...
    [layer pop_addAnimation:anim forKey:@"myKey"];

    可以根据开始动画时传入的键,来移除对应的动画:

    [layer pop_removeAnimationForKey:@"myKey"];

    开始动画时传入的键,也可以用来查询是否存在某个动画.更新一个正在执行的动画的 toValue,可以无缝实现动画效果间的过渡:

    anim = [layer pop_animationForKey:@"myKey"];
    if (anim) {
      /* 更新toValue为一个新值. */
      anim.toValue = @(42.0);
    } else {
      /* 创建并开始一个新的动画. */
      ....
    }

    上面的例子是以图层为例.Pop是以NSObject的扩展方式实现的.也就是说: 任何NSObject及其子类都可以通过Pop添加动画效果.

    动画类型

    有四种动画类型: 弹性动画,渐弱动画,基础动画和自定义动画.

    弹性动画

    弹性动画,可以给对象一个有活力的弹跳效果.下面的例子中,我们使用弹性动画来使图层的边框值从它的当前值变化为(0, 0 ,400, 400):

    POPSpringAnimation *anim = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerBounds];
    anim.toValue = [NSValue valueWithCGRect:CGRectMake(0, 0, 400, 400)];
    [layer pop_addAnimation:anim forKey:@"size"];

    渐变动画

    渐变动画,可以让对象缓慢地停止变化.下面的例子,我们使图层的横坐标从当前值以1000像素每秒的速度渐变:

    POPDecayAnimation *anim = [POPDecayAnimation animationWithPropertyNamed:kPOPLayerPositionX];
    anim.velocity = @(1000.);
    [layer pop_addAnimation:anim forKey:@"slide"];

    基础动画

    基础动画可以用来在指定的时间段动态改变属性的值.在默认的时间周期内动态让视图的透明度从0.0变化到1.0来实现淡入的效果:

    POPBasicAnimation *anim = [POPBasicAnimation animationWithPropertyNamed:kPOPViewAlpha];
    anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    anim.fromValue = @(0.0);
    anim.toValue = @(1.0);
    [view pop_addAnimation:anim forKey:@"fade"];

    自定义动画

    POPCustomAnimation 用来创建自定义动画和过渡效果.它通过管理 CADisplayLink 来管理时间与动画的关联性.更多细节,详见头文件.

    动画属性

    动画属性由POPAnimatableProperty类管理,用来指定在哪个属性上应用动画效果.在下面的例子中,我们创建了一个弹性动画,并且显示设置动画属性为与-[CALayer bounds]对应的属性:

    POPSpringAnimation *anim = [POPSpringAnimation animation];
    anim.property = [POPAnimatableProperty propertyWithName:kPOPLayerBounds];

    这个框架爱预先实现了了许多图层和视图共用的动画属性,你可以在自己的项目中直接使用.你也可以通过创建POPAnimatableProperty类的实例,来创建一个自定义的动画属性.下面的例子中,我们定义了一个自定义的volume动画属性:

    prop = [POPAnimatableProperty propertyWithName:@"com.foo.radio.volume" initializer:^(POPMutableAnimatableProperty *prop) {
      // 读取动画属性的值
      prop.readBlock = ^(id obj, CGFloat values[]) {
        values[0] = [obj volume];
      };
      // 设置动画属性的值.
      prop.writeBlock = ^(id obj, const CGFloat values[]) {
        [obj setVolume:values[0]];
      };
      // 力学上的临界值
      prop.threshold = 0.01;
    }];
    
    anim.property = prop;

    系统预定义的动画属性也是由上面例子的机制定义的,自定义动画属性时,很有借鉴价值.完整的预定义的动画属性列表和他们实现的具体细节参见POPAnimatableProperty.h:

    /**
     图层(CALayer)通用动画属性.
     */
    extern NSString * const kPOPLayerBackgroundColor;
    extern NSString * const kPOPLayerBounds;
    extern NSString * const kPOPLayerCornerRadius;
    extern NSString * const kPOPLayerBorderWidth;
    extern NSString * const kPOPLayerBorderColor;
    extern NSString * const kPOPLayerOpacity;
    extern NSString * const kPOPLayerPosition;
    extern NSString * const kPOPLayerPositionX;
    extern NSString * const kPOPLayerPositionY;
    extern NSString * const kPOPLayerRotation;
    extern NSString * const kPOPLayerRotationX;
    extern NSString * const kPOPLayerRotationY;
    extern NSString * const kPOPLayerScaleX;
    extern NSString * const kPOPLayerScaleXY;
    extern NSString * const kPOPLayerScaleY;
    extern NSString * const kPOPLayerSize;
    extern NSString * const kPOPLayerSubscaleXY;
    extern NSString * const kPOPLayerSubtranslationX;
    extern NSString * const kPOPLayerSubtranslationXY;
    extern NSString * const kPOPLayerSubtranslationY;
    extern NSString * const kPOPLayerSubtranslationZ;
    extern NSString * const kPOPLayerTranslationX;
    extern NSString * const kPOPLayerTranslationXY;
    extern NSString * const kPOPLayerTranslationY;
    extern NSString * const kPOPLayerTranslationZ;
    extern NSString * const kPOPLayerZPosition;
    extern NSString * const kPOPLayerShadowColor;
    extern NSString * const kPOPLayerShadowOffset;
    extern NSString * const kPOPLayerShadowOpacity;
    extern NSString * const kPOPLayerShadowRadius;
    
    /**
     图形层(CAShapeLayer)通用动画属性.
      */
    extern NSString * const kPOPShapeLayerStrokeStart;
    extern NSString * const kPOPShapeLayerStrokeEnd;
    extern NSString * const kPOPShapeLayerStrokeColor;
    extern NSString * const kPOPShapeLayerFillColor;
    
    /**
     视图约束(NSLayoutConstraint)通用动画属性.
      */
    extern NSString * const kPOPLayoutConstraintConstant;
    
    /**
     视图(UIView)通用动画属性.
     */
    extern NSString * const kPOPViewAlpha;
    extern NSString * const kPOPViewBackgroundColor;
    extern NSString * const kPOPViewBounds;
    extern NSString * const kPOPViewCenter;
    extern NSString * const kPOPViewFrame;
    extern NSString * const kPOPViewScaleX;
    extern NSString * const kPOPViewScaleXY;
    extern NSString * const kPOPViewScaleY;
    extern NSString * const kPOPViewSize;
    extern NSString * const kPOPViewTintColor;
    
    /**
     滚动视图(UIScrollView)通用动画属性.
     */
    extern NSString * const kPOPScrollViewContentOffset;
    extern NSString * const kPOPScrollViewContentSize;
    extern NSString * const kPOPScrollViewZoomScale;
    extern NSString * const kPOPScrollViewContentInset;
    
    /**
     列表(UITableView)通用动画属性.
     */
    extern NSString * const kPOPTableViewContentOffset;
    extern NSString * const kPOPTableViewContentSize;
    
    /**
     集合视图(UICollectionView)通用动画属性.
     */
    extern NSString * const kPOPCollectionViewContentOffset;
    extern NSString * const kPOPCollectionViewContentSize;
    
    /**
     导航栏(UINavigationBar)通用动画属性.
     */
    extern NSString * const kPOPNavigationBarBarTintColor;
    
    /**
     工具栏(UIToolBar)通用动画属性.
     */
    extern NSString * const kPOPToolbarBarTintColor;
    
    /**
     标签栏(UITabBar)通用动画属性.
     */
    extern NSString * const kPOPTabBarBarTintColor;
    
    /**
     标签(UILabel)通用动画属性.
     */
    extern NSString * const kPOPLabelTextColor;
  • 相关阅读:
    PHP页面跳转的几种方法
    PHP网站并发测试
    04-上传文件
    01-转>linux命令
    01-CDN的好处
    05-socket.io使用
    04-soket.io使用2 -数据同步简单聊天室效果
    03-socket.io 2.3.0版本的使用-用户请求接口,实时推送给前端数据
    02-转>
    跨域-转>预解析OPTIONS请求
  • 原文地址:https://www.cnblogs.com/ios122/p/4782210.html
Copyright © 2011-2022 走看看