沿着path路径做动画
路径
效果
源码
// // ViewController.m // PathAnimation // // Created by YouXianMing on 16/1/26. // Copyright © 2016年 YouXianMing. All rights reserved. // #import "ViewController.h" @interface ViewController () @property (nonatomic) CGPoint startPoint; @property (nonatomic) CGPoint endPoint; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // 起始点 结束点 self.startPoint = CGPointMake(0, 150); self.endPoint = CGPointMake(160, 150); // 初始化view UIButton *redButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 10, 10)]; redButton.center = self.startPoint; redButton.backgroundColor = [UIColor redColor]; [redButton addTarget:self action:@selector(buttonEvent) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:redButton]; // CAKeyframeAnimation CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; animation.path = [self path].CGPath; animation.duration = 2.f; animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; redButton.center = self.endPoint; [redButton.layer addAnimation:animation forKey:nil]; } - (UIBezierPath *)path { UIBezierPath* bezierPath = [UIBezierPath bezierPath]; [bezierPath moveToPoint: self.startPoint]; [bezierPath addLineToPoint: CGPointMake(68, 150)]; [bezierPath addLineToPoint: CGPointMake(83, 107)]; [bezierPath addLineToPoint: CGPointMake(96, 206)]; [bezierPath addLineToPoint: CGPointMake(102, 150)]; [bezierPath addLineToPoint: CGPointMake(116, 150)]; [bezierPath addLineToPoint: CGPointMake(127, 82)]; [bezierPath addLineToPoint: CGPointMake(143, 213)]; [bezierPath addLineToPoint: self.endPoint]; return bezierPath; } - (void)buttonEvent { // todo } @end
细节
效果
源码
// // ViewController.m // PathAnimation // // Created by YouXianMing on 16/1/26. // Copyright © 2016年 YouXianMing. All rights reserved. // #import "ViewController.h" @interface ViewController () @property (nonatomic) CGPoint startPoint; @property (nonatomic) CGPoint endPoint; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // 起始点 结束点 self.startPoint = CGPointMake(0, 150); self.endPoint = CGPointMake(160, 150); // 初始化view UIButton *redButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 10, 10)]; redButton.center = self.startPoint; redButton.backgroundColor = [UIColor redColor]; [redButton addTarget:self action:@selector(buttonEvent) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:redButton]; // CAKeyframeAnimation CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; animation.path = [self path].CGPath; animation.duration = 2.f; animation.autoreverses = true; animation.repeatCount = CGFLOAT_MAX; animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; [redButton.layer addAnimation:animation forKey:nil]; } - (UIBezierPath *)path { UIBezierPath* bezierPath = [UIBezierPath bezierPath]; [bezierPath moveToPoint: self.startPoint]; [bezierPath addLineToPoint: CGPointMake(68, 150)]; [bezierPath addLineToPoint: CGPointMake(83, 107)]; [bezierPath addLineToPoint: CGPointMake(96, 206)]; [bezierPath addLineToPoint: CGPointMake(102, 150)]; [bezierPath addLineToPoint: CGPointMake(116, 150)]; [bezierPath addLineToPoint: CGPointMake(127, 82)]; [bezierPath addLineToPoint: CGPointMake(143, 213)]; [bezierPath addLineToPoint: self.endPoint]; return bezierPath; } - (void)buttonEvent { // todo } @end
细节