2016-09-28 78 views
0

我有一个CAShapeLayer,其中包含一个“洞”和一个透明的周围(see screenshot)。我想动画这个圆的半径变化(我想让它变大或变小)。有任何想法吗 ?如何动画CAShapleLayer的路径更改?

这是我的层:

CAShapeLayer *fillLayer = [self getCircleLayerWithRadius:self.view.frame.size.width/2]; 

getCirleWithRadius功能:

-(CAShapeLayer *)getCircleLayerWithRadius:(NSInteger)radius { 
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.view.frame cornerRadius:0]; 
UIBezierPath *circlePath = [self getCirclePathWithRadius:radius]; 
[path appendPath:circlePath]; 
path.usesEvenOddFillRule = YES; 
CAShapeLayer *fillLayer = [CAShapeLayer layer]; 
fillLayer.path = path.CGPath; 
fillLayer.fillRule = kCAFillRuleEvenOdd; 
fillLayer.fillColor = [UIColor grayColor].CGColor; 
fillLayer.opacity = 0.5; 
return fillLayer; } 

getCircleWithRadius:

- (UIBezierPath *)getCirclePathWithRadius:(NSInteger)radius { 
CGRect rect = self.view.frame; 
UIBezierPath *circlePath; 
circlePath = [UIBezierPath bezierPathWithArcCenter:(CGPoint){rect.size.width/2, rect.size.height/2} radius:radius startAngle:0 endAngle:M_PI*2 clockwise:YES]; 
return circlePath;} 
+0

查看'CABasicAnimation' – ColdSteel

回答

0

尝试使用 'CABasicAnimation' 与@"path"关键。 下面是配置您的动画的示例:

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"path"]; 
    animation.duration = [CATransaction animationDuration]; 
    animation.timingFunction = [CATransaction animationTimingFunction]; 
    animation.fromValue = (id)oldPath; 
    animation.toValue = (id)path; 
    [fillLayer addAnimation:animation forKey:@"pathAnimation"];