用POP动画引擎实现弹簧动画(POPSpringAnimation)

效果图:

#import "ViewController.h"
#import <POP.h>

@interface ViewController ()

@property (nonatomic, weak) UIView *testView;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    self.view.backgroundColor = [UIColor blackColor];
    
    // 初始化测试控件
    UIView *testView         = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)];
    testView.center          = self.view.center;
    testView.backgroundColor = [UIColor redColor];
    self.testView            = testView;
    [self.view addSubview:testView];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    // 初始化弹簧动画
    POPSpringAnimation *springAnimation = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerBounds];
    springAnimation.springSpeed         = 0;                    // 设置动画速度(常用)
    springAnimation.springBounciness    = 20;                   // 设置弹性大小(常用)
    // springAnimation.dynamicsFriction    = 10;                // 设置阻止弹性的阻力(选用)
    // springAnimation.dynamicsTension     = 100;               // 设置弹性的张力(可以理解为每次变大的程度, 选用)
    if (self.testView.frame.size.width == 100) {
        springAnimation.toValue = [NSValue valueWithCGRect:CGRectMake(0, 0, 50, 50)];
    } else {
        springAnimation.toValue = [NSValue valueWithCGRect:CGRectMake(0, 0, 100, 100)];
    }
    
    // 添加动画
    [self.testView.layer pop_addAnimation:springAnimation forKey:nil];
}

@end

github:https://github.com/RinpeChen/POPSpringAnimationDemo

原文地址:https://www.cnblogs.com/Rinpe/p/5167331.html