2016-09-28 1 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"]; 
Смежные вопросы