zoukankan      html  css  js  c++  java
  • 用POP动画模拟真实秒钟摆动效果

    用POP动画模拟真实秒钟摆动效果

    静态图:

    动画图:

    此处用到了POP中的Spring系列动画,现提供源码如下:

    SecondClockView.h 与 SecondClockView.m

    //
    //  SecondClockView.h
    //  YouXianMingClock
    //
    //  Created by YouXianMing on 14-10-12.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    @interface SecondClockView : UIView
    
    /**
     *  Use in conjunction with 'springSpeed' to change animation effect. Values are converted into corresponding dynamics constants. Defined as a value in the range [0, 20]. Defaults to 18.
     */
    @property (nonatomic, assign) CGFloat springBounciness;
    
    /**
     *  The mass used in the dynamics simulation.
     */
    @property (nonatomic, assign) CGFloat dynamicsMass;
    
    /**
     *  Use in conjunction with 'springBounciness' to change animation effect. Values are converted into corresponding dynamics constants. Defined as a value in the range [0, 20]. Defaults to 18.
     */
    @property (nonatomic, assign) CGFloat springSpeed;
    
    /**
     *  给与时间进行的动画
     *
     *  @param second 当前秒
     */
    - (void)startAnimationWithSecond:(float)second;
    
    @end
    //
    //  SecondClockView.m
    //  YouXianMingClock
    //
    //  Created by YouXianMing on 14-10-12.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import "SecondClockView.h"
    #import "POP.h"
    
    /**
     *  将角度转换为弧度
     *
     *  @param d 角度
     *
     *  @return 弧度
     */
    #define DEGREES__TO__RADIANS(d)  ((d) * M_PI / 180.f)
    
    @interface SecondClockView ()
    
    {
        
        BOOL firstTime;
        
    }
    
    @end
    
    @implementation SecondClockView
    
    - (void)startAnimationWithSecond:(float)second
    {
        // 秒钟
        POPSpringAnimation *springAnimation = 
            [POPSpringAnimation animationWithPropertyNamed:kPOPLayerRotation];
        
        springAnimation.fromValue        = @(DEGREES__TO__RADIANS((360)/60.f)*(second - 1) + DEGREES__TO__RADIANS(-90));
        if (firstTime == NO) {
            firstTime = YES;
            springAnimation.fromValue    = @(0);
        }
        springAnimation.toValue          = @(DEGREES__TO__RADIANS((360)/60.f)*second + DEGREES__TO__RADIANS(-90));
        springAnimation.springBounciness = (_springBounciness > 0 && _springBounciness <= 20)?_springBounciness:18.f;
        springAnimation.dynamicsMass     = (_dynamicsMass > 0)?_dynamicsMass:1.5f;
        springAnimation.springSpeed      = (_springSpeed > 0 && _springSpeed <= 20)?_springSpeed:18.f;
        [self.layer pop_addAnimation:springAnimation forKey:nil];
    }
    
    @end

    使用时候的情形

    使用的时候请引入POP库

  • 相关阅读:
    Java Web的web.xml文件作用及基本配置(转)
    Java Web的传值汇总(含JavaBean)
    路径前面的符号意思(~/,./,../,/)
    MySQL的insert语句的区别
    Linux 安全
    拇指玩」制作的「谷歌安装器」app
    经典角色权限系统设计五张表及拓展应用
    MySQL用户和权限管理
    【基于url权限管理 shiro(一)】--基础
    android图片文件的路径地址与Uri的相互转换
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4020939.html
Copyright © 2011-2022 走看看