1 UIBezierPath *path = [UIBezierPath bezierPath]; 2 [path moveToPoint:CGPointMake(-40, 100)]; 3 [path addLineToPoint:CGPointMake(360, 100)]; 4 [path addLineToPoint:CGPointMake(360, 200)]; 5 [path addLineToPoint:CGPointMake(-40, 200)]; 6 [path addLineToPoint:CGPointMake(-40, 300)]; 7 [path addLineToPoint:CGPointMake(360, 300)]; 8
9 CAKeyframeAnimation *moveAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 10 moveAnimation.path = path.CGPath; 11 moveAnimation.duration = 8.0f; 12 moveAnimation.rotationMode = kCAAnimationRotateAuto; 13 [shapeLayer addAnimation:moveAnimation forKey:@"moveAnimation"];
1 CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 2
3 CATransform3D scale1 = CATransform3DMakeScale(0.5, 0.5, 1); 4 CATransform3D scale2 = CATransform3DMakeScale(1.2, 1.2, 1); 5 CATransform3D scale3 = CATransform3DMakeScale(0.9, 0.9, 1); 6 CATransform3D scale4 = CATransform3DMakeScale(1.0, 1.0, 1); 7
8 NSArray *frameValues = [NSArray arrayWithObjects: 9 [NSValue valueWithCATransform3D:scale1], 10 [NSValue valueWithCATransform3D:scale2], 11 [NSValue valueWithCATransform3D:scale3], 12 [NSValue valueWithCATransform3D:scale4], 13 nil]; 14
15 [animation setValues:frameValues]; 16
17 NSArray *frameTimes = [NSArray arrayWithObjects: 18 [NSNumber numberWithFloat:0.0], 19 [NSNumber numberWithFloat:0.5], 20 [NSNumber numberWithFloat:0.9], 21 [NSNumber numberWithFloat:1.0], 22 nil]; 23 [animation setKeyTimes:frameTimes]; 24
25 animation.fillMode = kCAFillModeForwards; 26 animation.duration = .25; 27
28 [self addAnimation:animation forKey:@"DSPopUpAnimation"];
基于路径的关键帧动画
1 CGMutablePathRef path = CGPathCreateMutable(); 2
3 CGPathMoveToPoint(path, NULL, 50.0, 120.0); 4 CGPathAddCurveToPoint(path, NULL, 50.0, 275.0, 150.0, 275.0, 150.0, 120.0); 5 CGPathAddCurveToPoint(path,NULL,150.0,275.0,250.0,275.0,250.0,120.0); 6 CGPathAddCurveToPoint(path,NULL,250.0,275.0,350.0,275.0,350.0,120.0); 7 CGPathAddCurveToPoint(path,NULL,350.0,275.0,450.0,275.0,450.0,120.0); 8
9 CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 10 [anim setPath:path]; 11 [anim setDuration:3.0]; 12 [anim setAutoreverses:YES]; 13 CFRelease(path); 14 [self.layer addAnimation:anim forKey:@"path"];
基于位置点的关键桢动画
1 CGPoint pt0 = CGPointMake(50.0, 120.0); 2 CGPoint pt1 = CGPointMake(50.0, 275.0); 3 CGPoint pt2 = CGPointMake(150.0, 275.0); 4 CGPoint pt3 = CGPointMake(150.0, 120.0); 5 CGPoint pt4 = CGPointMake(150.0, 275.0); 6 CGPoint pt5 = CGPointMake(250.0, 275.0); 7 CGPoint pt6 = CGPointMake(250.0, 120.0); 8 CGPoint pt7 = CGPointMake(250.0, 275.0); 9 CGPoint pt8 = CGPointMake(350.0, 275.0); 10 CGPoint pt9 = CGPointMake(350.0, 120.0); 11 CGPoint pt10 = CGPointMake(350.0, 275.0); 12 CGPoint pt11 = CGPointMake(450.0, 275.0); 13 CGPoint pt12 = CGPointMake(450.0, 120.0); 14 NSArray *values = [NSArray arrayWithObjects: 15 [NSValue valueWithCGPoint:pt0], 16 [NSValue valueWithCGPoint:pt1], 17 [NSValue valueWithCGPoint:pt2], 18 [NSValue valueWithCGPoint:pt3], 19 [NSValue valueWithCGPoint:pt4], 20 [NSValue valueWithCGPoint:pt5], 21 [NSValue valueWithCGPoint:pt6], 22 [NSValue valueWithCGPoint:pt7], 23 [NSValue valueWithCGPoint:pt8], 24 [NSValue valueWithCGPoint:pt9], 25 [NSValue valueWithCGPoint:pt10], 26 [NSValue valueWithCGPoint:pt11], 27 [NSValue valueWithCGPoint:pt12], nil]; 28 CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 29 [anim setValues:values]; 30 [anim setDuration:3.0]; 31 [anim setAutoreverses:YES]; 32
33 [self.layer addAnimation:anim forKey:@"path"];
旋转180度
1 CAKeyframeAnimation *keyAnim = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 2 CATransform3D rotation1 = CATransform3DMakeRotation(30 * M_PI/180, 0, 0, -1); 3 CATransform3D rotation2 = CATransform3DMakeRotation(60 * M_PI/180, 0, 0, -1); 4 CATransform3D rotation3 = CATransform3DMakeRotation(90 * M_PI/180, 0, 0, -1); 5 CATransform3D rotation4 = CATransform3DMakeRotation(120 * M_PI/180, 0, 0, -1); 6 CATransform3D rotation5 = CATransform3DMakeRotation(150 * M_PI/180, 0, 0, -1); 7 CATransform3D rotation6 = CATransform3DMakeRotation(180 * M_PI/180, 0, 0, -1); 8
9 [keyAnim setValues:[NSArray arrayWithObjects: 10 [NSValue valueWithCATransform3D:rotation1], 11 [NSValue valueWithCATransform3D:rotation2], 12 [NSValue valueWithCATransform3D:rotation3], 13 [NSValue valueWithCATransform3D:rotation4], 14 [NSValue valueWithCATransform3D:rotation5], 15 [NSValue valueWithCATransform3D:rotation6], 16 nil]]; 17 [keyAnim setKeyTimes:[NSArray arrayWithObjects: 18 [NSNumber numberWithFloat:0.0], 19 [NSNumber numberWithFloat:0.2f], 20 [NSNumber numberWithFloat:0.4f], 21 [NSNumber numberWithFloat:0.6f], 22 [NSNumber numberWithFloat:0.8f], 23 [NSNumber numberWithFloat:1.0f], 24 nil]]; 25 [keyAnim setDuration:4]; 26 [keyAnim setFillMode:kCAFillModeForwards]; 27 [keyAnim setRemovedOnCompletion:NO]; 28 [zhiZhenLayer addAnimation:keyAnim forKey:nil];