You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
1.6 KiB
78 lines
1.6 KiB
// |
|
// WSBezier.m |
|
// Test |
|
// |
|
// Created by senro wang on 15/8/11. |
|
// Copyright (c) 2015年 王燊. All rights reserved. |
|
// |
|
|
|
#import "WSBezier.h" |
|
|
|
@implementation WSBezier |
|
|
|
|
|
- (instancetype)init{ |
|
|
|
if (self = [super init]) { |
|
|
|
|
|
[self _initPoints]; |
|
} |
|
return self; |
|
} |
|
|
|
- (void)_initPoints{ |
|
|
|
WSPoint start; |
|
WSPoint first; |
|
WSPoint second; |
|
WSPoint end; |
|
start.x = 0; |
|
start.y = 0; |
|
first.x = 0; |
|
first.y = 0.57; |
|
second.x = 0.44; |
|
second.y = 1; |
|
end.x = 1; |
|
end.y = 1; |
|
|
|
self.wsStart = start; |
|
self.wsFirst = first; |
|
self.wsSecond = second; |
|
self.wsEnd = end; |
|
|
|
} |
|
|
|
|
|
//贝塞尔 - |
|
//y=y0·(1-t)³+3·y1·t·(1-t)²+3·y2·t²·(1-t)+y3·t³ |
|
//x=x0·(1-t)³+3·x1·t·(1-t)²+3·x2·t²·(1-t)+x3·t³ |
|
|
|
|
|
//贝塞尔的 四个 控制点 |
|
//(0 , 0 ) (0 , 0.57) (0.44 , 1 ) (1 ,1); // |
|
// 还可以 设置 ease in , ease out ,ease inout ,以及spring动画 。 有需要 联系840787626@qq.com |
|
|
|
|
|
//推荐大家一个网站 - 在这里你可以随意diy 你的 动画曲线 - |
|
//http://labs.pufen.net/cubic-bezier/#0,.57,.44,1 |
|
|
|
|
|
- (WSPoint)pointWithdt:(float )dt{ |
|
|
|
WSPoint result; |
|
|
|
float t = 1 - dt; |
|
float tSqure = t * t; |
|
float tCube = t * tSqure; |
|
float dtSqure = dt * dt; |
|
float dtCube = dtSqure * dt; |
|
|
|
result.x = self.wsStart.x * tCube + 3 * self.wsFirst.x * dt * tSqure + 3 * self.wsSecond.x * dtSqure * t + self.wsEnd.x * dtCube; |
|
result.y = self.wsStart.y * tCube + 3 * self.wsFirst.y * dt * tSqure + 3 * self.wsSecond.y * dtSqure * t + self.wsEnd.y * dtCube; |
|
return result; |
|
|
|
|
|
} |
|
|
|
@end
|
|
|