日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

POPSpring动画参数详解

發布時間:2025/3/21 javascript 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POPSpring动画参数详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

POPSpring動畫參數詳解

?

效果

?

源碼

https://github.com/YouXianMing/Animations

// // POPSpringParameterController.m // Animations // // Created by YouXianMing on 15/11/29. // Copyright ? 2015年 YouXianMing. All rights reserved. // #import "POPSpringParameterController.h" #import "RangeValueView.h" #import "UIView+SetRect.h" #import "POP.h" #import "FontAttribute.h" #import "ForegroundColorAttribute.h" #import "NSMutableAttributedString+StringAttribute.h"#define Width [UIScreen mainScreen].bounds.size.width #define Height [UIScreen mainScreen].bounds.size.height@interface POPSpringParameterController ()@property (nonatomic, strong) UILabel *secondsLabel; @property (nonatomic, strong) NSDate *dateStart;@property (nonatomic, strong) RangeValueView *rangeSpeed; @property (nonatomic, strong) RangeValueView *rangeBounciness; @property (nonatomic, strong) RangeValueView *rangeMass; @property (nonatomic, strong) RangeValueView *rangeFriction; @property (nonatomic, strong) RangeValueView *rangeTension;@property (nonatomic, strong) UIButton *showView;@end@implementation POPSpringParameterController- (void)viewDidLoad {[super viewDidLoad]; }- (void)setup {[super setup];[self initSecondLabel];[self initButton];[self initRangeViews];[self bringTitleViewToFront]; }- (void)initSecondLabel {self.secondsLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10 + 64, 100, 20)];self.secondsLabel.attributedText = [self stringWithFloat:0.f];[self.view addSubview:self.secondsLabel]; }- (NSAttributedString *)stringWithFloat:(CGFloat)value {// 字符串NSString *stringValue = [NSString stringWithFormat:@"%.2f", value];NSString *secondString = [NSString stringWithFormat:@"seconds"];NSString *totalString = [NSString stringWithFormat:@"%@ %@", stringValue, secondString];// 字體UIFont *allFont = Font_Avenir(12);UIFont *numFont = Font_Avenir_Light(20);FontAttribute *totalFont = [FontAttribute new];totalFont.font = allFont;totalFont.effectRange = NSMakeRange(0, totalString.length);FontAttribute *valueFont = [FontAttribute new];valueFont.font = numFont;valueFont.effectRange = [totalString rangeOfString:stringValue];ForegroundColorAttribute *textColor = [ForegroundColorAttribute new];textColor.color = [UIColor grayColor];textColor.effectRange = NSMakeRange(0, totalString.length);ForegroundColorAttribute *numColor = [ForegroundColorAttribute new];numColor.color = [UIColor blackColor];numColor.effectRange = [totalString rangeOfString:stringValue];NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:totalString];[attributeString addStringAttribute:totalFont];[attributeString addStringAttribute:valueFont];[attributeString addStringAttribute:textColor];[attributeString addStringAttribute:numColor];return attributeString; }- (void)initButton {CGFloat gap = Height - 60 - 40*4 - 64;CGFloat width = 100.f;self.showView = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, width, width)];self.showView.center = CGPointMake(self.view.middleX, 64 + gap / 2.f);self.showView.backgroundColor = [UIColor cyanColor];self.showView.layer.cornerRadius = self.showView.width / 2.f;[self.view addSubview:self.showView];[self.showView addTarget:selfaction:@selector(doAnimation)forControlEvents:UIControlEventTouchUpInside]; }- (void)doAnimation {// 移除動畫 [self.showView.layer pop_removeAllAnimations];POPSpringAnimation *spring = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerScaleXY];// 設置代理spring.delegate = self;// 動畫起始值 + 動畫結束值spring.fromValue = [NSValue valueWithCGSize:CGSizeMake(1.f, 1.f)];spring.toValue = [NSValue valueWithCGSize:CGSizeMake(2.f, 2.f)];// 參數的設置spring.springSpeed = self.rangeSpeed.currentValue;spring.springBounciness = self.rangeBounciness.currentValue;spring.dynamicsMass = self.rangeMass.currentValue;spring.dynamicsFriction = self.rangeFriction.currentValue;spring.dynamicsTension = self.rangeTension.currentValue;// 執行動畫 [self.showView.layer pop_addAnimation:spring forKey:nil]; }- (void)pop_animationDidStart:(POPAnimation *)anim {self.dateStart = [NSDate date]; }- (void)pop_animationDidApply:(POPAnimation *)anim {CGFloat seconds = -[self.dateStart timeIntervalSinceNow];self.secondsLabel.attributedText = [self stringWithFloat:seconds]; }- (void)pop_animationDidStop:(POPAnimation *)anim finished:(BOOL)finished {CGFloat seconds = -[self.dateStart timeIntervalSinceNow];self.secondsLabel.attributedText = [self stringWithFloat:seconds]; }- (void)initRangeViews {self.rangeSpeed = [RangeValueView rangeValueViewWithFrame:CGRectMake(10, Height - 60, Width - 20, 0)name:@"速度 Speed"minValue:0.fmaxValue:20.fdefaultValue:12.f];[self.view addSubview:self.rangeSpeed];self.rangeBounciness = [RangeValueView rangeValueViewWithFrame:CGRectMake(10, Height - 60 - 40, Width - 20, 0)name:@"彈力 Bounciness"minValue:0.fmaxValue:20.fdefaultValue:4.f];[self.view addSubview:self.rangeBounciness];self.rangeMass = [RangeValueView rangeValueViewWithFrame:CGRectMake(10, Height - 60 - 40*2, Width - 20, 0)name:@"質量 Mass"minValue:0.1maxValue:10.fdefaultValue:1.f];[self.view addSubview:self.rangeMass];self.rangeFriction = [RangeValueView rangeValueViewWithFrame:CGRectMake(10, Height - 60 - 40*3, Width - 20, 0)name:@"摩擦 Friction"minValue:1maxValue:50defaultValue:30.486980];[self.view addSubview:self.rangeFriction];self.rangeTension = [RangeValueView rangeValueViewWithFrame:CGRectMake(10, Height - 60 - 40*4, Width - 20, 0)name:@"拉力 Tension"minValue:1maxValue:1000defaultValue:300];[self.view addSubview:self.rangeTension]; }@end

?

細節

?

總結

以上是生活随笔為你收集整理的POPSpring动画参数详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。