/ QuartzCore / CAMediaTimingFunction.m
CAMediaTimingFunction.m
1 #import <Foundation/NSRaise.h> 2 #import <Foundation/NSString.h> 3 #import <QuartzCore/CAMediaTimingFunction.h> 4 5 NSString *const kCAMediaTimingFunctionLinear = @"kCAMediaTimingFunctionLinear"; 6 NSString *const kCAMediaTimingFunctionEaseIn = @"kCAMediaTimingFunctionEaseIn"; 7 NSString *const kCAMediaTimingFunctionEaseOut = 8 @"kCAMediaTimingFunctionEaseOut"; 9 NSString *const kCAMediaTimingFunctionEaseInEaseOut = 10 @"kCAMediaTimingFunctionEaseInEaseOut"; 11 NSString *const kCAMediaTimingFunctionDefault = 12 @"kCAMediaTimingFunctionDefault"; 13 14 @implementation CAMediaTimingFunction 15 16 - initWithControlPoints: (CGFloat) 17 c1x: (CGFloat) c1y 18 :(CGFloat) c2x 19 :(CGFloat) c2y 20 { 21 _c1x = c1x; 22 _c1y = c1y; 23 _c2x = c2x; 24 _c2y = c2y; 25 return self; 26 } 27 28 + functionWithControlPoints: (CGFloat) 29 c1x: (CGFloat) c1y 30 :(CGFloat) c2x 31 :(CGFloat) c2y 32 { 33 return [[[self alloc] initWithControlPoints: c1x: c1y:c2x:c2y] autorelease]; 34 } 35 36 + functionWithName: (NSString *) name { 37 if ([name isEqualToString: kCAMediaTimingFunctionLinear]) 38 return [self functionWithControlPoints: 0: 0:1:1]; 39 if ([name isEqualToString: kCAMediaTimingFunctionEaseIn]) 40 return [self functionWithControlPoints: 0.5: 0:1:1]; 41 if ([name isEqualToString: kCAMediaTimingFunctionEaseOut]) 42 return [self functionWithControlPoints: 0: 0:0.5:1]; 43 if ([name isEqualToString: kCAMediaTimingFunctionEaseInEaseOut]) 44 return [self functionWithControlPoints: 0.5: 0:0.5:1]; 45 if ([name isEqualToString: kCAMediaTimingFunctionDefault]) 46 return [self functionWithControlPoints: 0.25: 0.1:0.25:1]; 47 48 return nil; 49 } 50 51 - (void) getControlPointAtIndex: (size_t) index values: (CGFloat[2]) ptr { 52 53 switch (index) { 54 55 default: 56 case 0: 57 ptr[0] = 0; 58 ptr[1] = 0; 59 break; 60 61 case 1: 62 ptr[0] = _c1x; 63 ptr[1] = _c1y; 64 break; 65 66 case 2: 67 ptr[0] = _c2x; 68 ptr[1] = _c2y; 69 break; 70 71 case 3: 72 ptr[0] = 1; 73 ptr[1] = 1; 74 break; 75 } 76 } 77 78 @end