您的位置:首页 > 编程语言

CoreAnimation-06-CAKeyframeAnimation 相关代码

2015-08-31 09:57 351 查看
- (void)awakeFromNib{

iMV = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];

iMV.image = [UIImage imageNamed:@"c"];

[self addSubview:iMV];

NSLog(@"%@",NSStringFromCGRect([[self.subviews firstObject] layer].bounds));

}

使用成员属性保存贝瑟尔路径

@property (nonatomic, strong) UIBezierPath *path;


监听触摸事件的状态,绘制贝瑟尔曲线

开始

//确定起点
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//获取当前触摸点
UITouch *touch = [touches anyObject];
CGPoint curretnPoint = [touch locationInView:self];

//创建路径
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:curretnPoint];
//保存路径
self.path = path;
}


移动

//添加线条
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
//获取当前触摸点
UITouch *touch = [touches anyObject];
CGPoint currentPoint = [touch locationInView:self];
//添加线条
[self.path addLineToPoint:currentPoint];
//重绘,将曲线显示到图层上
[self setNeedsDisplay];
}


结束(创建动画)

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
//创建动画
CAKeyframeAnimation *animation = [CAKeyframeAnimation animation];

//指定执行动画的属性,
animation.keyPath = @"position";
//设置动画的执行路径
animation.path = self.path.CGPath;

//设置动画的执行时间
animation.duration = 1;
//设置动画的重复次数
animation.repeatCount = MAXFLOAT;

//将动画添加到对应的图层上
[[[self.subviews firstObject] layer] addAnimation:animation forKey:nil];
}


将路径显示到图层上

//绘制路径
- (void)drawRect:(CGRect)rect
{
[self.path stroke];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: