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

细节


目录
相关文章
|
存储 缓存 算法
iOS 常见触发离屏渲染场景及优化方案总结
iOS 常见触发离屏渲染场景及优化方案总结
709 0
iOS 常见触发离屏渲染场景及优化方案总结
|
12月前
|
程序员 开发工具 iOS开发
UIVisualEffectView 毛玻璃效果
UIVisualEffectView 毛玻璃效果
424 0
|
12月前
|
数据采集 存储 JSON
试下微调GPT-3做一个心理问答机器人
试下微调GPT-3做一个心理问答机器人 前言 最近,笔者做的一个小程序还差最后一个心理问答的功能,主要功能基本就完成了。我想偷个懒,那就调用别人的API吧,正好GPT-3非常火,那就试试?
312 0
|
移动开发 负载均衡 JavaScript
Socket.IO 这个库实现了跨平台的双向通信
Socket.IO 是一个为实时应用提供跨平台实时通信的库。目标是使实时应用在每个浏览器和移动设备上成为可能,模糊不同的传输机制之间的差异。它使用了浏览器支持并采用的 HTML5 WebSocket 标准。以下内容为翻译官网 https://socket.io/docs/ 。 聊天应用程序 demo 地址 https://socket.io/demos/chat/
|
iOS开发
完整版在xcode打测试专用ipa包流程​
完整版在xcode打测试专用ipa包流程​
653 0
完整版在xcode打测试专用ipa包流程​
|
iOS开发
iOS CollectionView reloadData 闪烁解决办法
iOS CollectionView reloadData 闪烁解决办法
872 0
SwiftUI—使用Spacer空格视图撑满布局空间
SwiftUI—使用Spacer空格视图撑满布局空间
775 0
SwiftUI—使用Spacer空格视图撑满布局空间
|
缓存 API iOS开发
iOS 轮播图缩放动态图和网图混播
iOS 轮播图缩放动态图和网图混播
iOS 轮播图缩放动态图和网图混播
如何更好的限制一个UITextField/UITextView的输入字数
要限制一个UITextField/UITextView的输入字数,首先想到的应该是通过UITextFieldDelegate/UITextViewDelegate 的代理方法来限制,那么如何来更好的限制输入字数呢,下面我们来看看:
|
开发者 iOS开发 MacOS
macOS开发之NSTableView的应用详解(一)
macOS开发之NSTableView的应用详解
633 0