CASpringAnimation的使用

简介:

CASpringAnimation的使用

 

效果

 

源码

https://github.com/YouXianMing/Animations



//
//  CASpringAnimationController.m
//  Animations
//
//  Created by YouXianMing on 16/1/19.
//  Copyright © 2016年 YouXianMing. All rights reserved.
//

#import "CASpringAnimationController.h"
#import "RangeValueView.h"
#import "WxHxD.h"
#import "UIView+SetRect.h"

@interface CASpringAnimationController ()

@property (nonatomic, strong) UIButton       *showView;

@property (nonatomic, strong) RangeValueView *stiffnessView;
@property (nonatomic, strong) RangeValueView *dampingView;
@property (nonatomic, strong) RangeValueView *massView;
@property (nonatomic, strong) RangeValueView *initialVelocityView;

@end

@implementation CASpringAnimationController

- (void)setup {
    
    [super setup];
    
    [self initRangeViews];
    
    [self initButton];
}

- (void)initButton {
    
    CGFloat gap = Height - 60 - 40*4 - 64;
    
    CGFloat width                    = 50.f;
    self.showView                    = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, width, width)];
    self.showView.center             = CGPointMake(self.contentView.middleX, 64 + gap / 2.f);
    self.showView.backgroundColor    = [UIColor cyanColor];
    self.showView.layer.cornerRadius = width / 2.f;
    self.showView.x                  = Width / 2.f - 50;
    [self.showView addTarget:self action:@selector(doAnimation) forControlEvents:UIControlEventTouchUpInside];
    [self.contentView addSubview:self.showView];
}

- (void)doAnimation {
    
    CASpringAnimation *springAnimation = [CASpringAnimation animationWithKeyPath:@"position.x"];
    springAnimation.stiffness          = self.stiffnessView.currentValue;
    springAnimation.mass               = self.massView.currentValue;
    springAnimation.damping            = self.dampingView.currentValue;
    springAnimation.initialVelocity    = self.initialVelocityView.currentValue;
    springAnimation.duration           = springAnimation.settlingDuration;
    
    springAnimation.fromValue    = @(Width / 2.f - 50);
    springAnimation.toValue      = @(Width / 2.f + 50);
    self.showView.layer.position = CGPointMake(Width / 2.f + 50, self.showView.layer.position.y);
    
    [self.showView.layer addAnimation:springAnimation forKey:nil];
}

- (void)initRangeViews {
    
    self.stiffnessView = [RangeValueView rangeValueViewWithFrame:CGRectMake(10, Height - 60, Width - 20, 0)
                                                            name:@"硬度  Stiffness"
                                                        minValue:10.f
                                                        maxValue:200.f
                                                    defaultValue:100.f];
    [self.contentView addSubview:self.stiffnessView];
    
    
    self.dampingView = [RangeValueView rangeValueViewWithFrame:CGRectMake(10, Height - 60 - 40, Width - 20, 0)
                                                          name:@"阻尼  Damping"
                                                      minValue:0.1f
                                                      maxValue:10.f
                                                  defaultValue:5.f];
    [self.contentView addSubview:self.dampingView];
    
    
    self.massView = [RangeValueView rangeValueViewWithFrame:CGRectMake(10, Height - 60 - 40*2, Width - 20, 0)
                                                       name:@"质量  Mass"
                                                   minValue:0.1
                                                   maxValue:20.f
                                               defaultValue:1.f];
    [self.contentView addSubview:self.massView];
    
    
    self.initialVelocityView = [RangeValueView rangeValueViewWithFrame:CGRectMake(10, Height - 60 - 40*3, Width - 20, 0)
                                                                  name:@"速度  Velocity"
                                                              minValue:-20.f
                                                              maxValue:20.f
                                                          defaultValue:0.f];
    [self.contentView addSubview:self.initialVelocityView];
}

@end

细节


目录
相关文章
|
Web App开发 iOS开发 Windows
ios获取原生系统应用的包名
ios获取原生系统应用的包名
2453 0
|
网络协议 Unix Android开发
android emulator虚拟设备分析第五篇之pipe上的opengles
一、概述 据说qemu的gpu的实现,运行起来非常慢。所以android emulator提供了一种use host gpu的方式,guest os可以使用host机器的opengl库去画图,速度快很多。
3189 0
|
8月前
|
测试技术 Docker 容器
性能工具之Taurus快速入门
【5月更文挑战第8天】性能工具之Taurus快速入门
215 1
性能工具之Taurus快速入门
|
7月前
|
Dart 开发者
Dart中的类型判断(is 关键字)
Dart中的类型判断(is 关键字)
158 0
|
8月前
|
存储 缓存 前端开发
【Flutter前端技术开发专栏】Flutter中的图片加载与缓存优化
【4月更文挑战第30天】本文探讨了 Flutter 中如何优化图片加载与缓存,以提升移动应用性能。通过使用图片占位符、压缩裁剪、缓存策略(如`cached_network_image`插件)以及异步加载和预加载图片,可以显著加快加载速度。此外,利用`FadeInImage`、`FutureBuilder`和图片库等工具,能进一步改善用户体验。优化图片处理是提升Flutter应用效率的关键,本文为开发者提供了实用指导。
711 0
【Flutter前端技术开发专栏】Flutter中的图片加载与缓存优化
|
iOS开发
加载中,加载中......使用SwiftUI设计2种Loading动画
加载中,加载中......使用SwiftUI设计2种Loading动画
447 0
|
编解码
mac版本ae软件下载安装教程全版本Ae(After Effects软件)下载
mac版本ae软件下载安装教程全版本Ae(After Effects软件)下载
384 0
|
设计模式 Java 关系型数据库
设计模式之七大设计原则详解
设计模式之七大设计原则详解
802 0
设计模式之七大设计原则详解
|
中间件 Shell Go
EngineGroup:让 Flutter 桌面端引擎“飘”起来
EngineGroup:让 Flutter 桌面端引擎“飘”起来
1389 0
EngineGroup:让 Flutter 桌面端引擎“飘”起来
|
iOS开发
iOS CollectionView reloadData 闪烁解决办法
iOS CollectionView reloadData 闪烁解决办法
993 0

热门文章

最新文章