0

특정 모양의 경로 변경을 애니메이션화하려고합니다. 이 코드를 간단한 .path [cgpath] 설정자로 바꾸면 애니메이션없이 수동으로 변경할 수 있습니다. 그러나 미학적 변화를위한 애니메이션을 만들고 싶습니다.CAShapeLayer 경로 애니메이션

이 코드가 실행되면 로그에 애니메이션이 완료되었음을 알리지 만 모양을 변경하지 않습니다.

for (CALayer *layer in self.view.layer.sublayers) { 
    if ([layer isKindOfClass:[CAShapeLayer class]]) { 
     CAShapeLayer *copy = (CAShapeLayer *)layer; 
     if ([sideChoice isEqualToString:@"datum"]) { 
      if ([copy.name isEqualToString:@"datumSideLayer"]) { 
       [CATransaction begin]; 
       [CATransaction setCompletionBlock:^{ 
        NSLog(@"Animation complete."); 
       }]; 
       CABasicAnimation *morph = [CABasicAnimation animationWithKeyPath:@"path"]; 
       morph.duration = 1; 
       morph.toValue = pathChange; 
       [copy addAnimation:morph forKey:nil]; 

       [CATransaction commit]; 
       break; 
      } 
     } else if ([sideChoice isEqualToString:@"opposite"]) { 
      if ([copy.name isEqualToString:@"oppositeSideLayer"]) { 

      } 
     } 
    } 
} 

답변

0
for (CALayer *layer in self.view.layer.sublayers) { 
    if ([layer isKindOfClass:[CAShapeLayer class]]) { 
     CAShapeLayer *copy = (CAShapeLayer *)layer; 
     if ([sideChoice isEqualToString:@"datum"]) { 
      if ([copy.name isEqualToString:@"datumSideLayer"]) { 
       [CATransaction begin]; 
       [CATransaction setCompletionBlock:^{ 
        NSLog(@"Animation complete."); 
       }]; 
       CABasicAnimation *morph = [CABasicAnimation animationWithKeyPath:@"path"]; 
       morph.duration = 1; 
       morph.fromValue = (id) copy.path; 
       morph.toValue = (id) pathChange.CGPath; 
       [copy addAnimation:morph forKey:nil]; 

       copy.path = [pathChange CGPath]; 
       [CATransaction commit]; 
       break; 
      } 
     } else if ([sideChoice isEqualToString:@"opposite"]) { 
      if ([copy.name isEqualToString:@"oppositeSideLayer"]) { 

      } 
     } 
    } 
} 

내가 올바르게 fromValue를 설정하지 않은도 나는 CGPath를 가리키는했다.