단일 레이어에 애니메이션을 적용하여 화면의 임의 경로를 따라 위치를 변경했습니다. 이제는이 애니메이션을 여러 번 복제하여 구석 구부러지는 환상을 보려고합니다. 코드를 CATransaction 안에 넣고 루프의 각 반복마다 시작 위치를 증가시키는 루프에 넣은 다음 루프 다음에 CATransaction을 커밋했습니다. 내가 볼 수있는 효과는 코드가 루프에 없다면 (즉, 단 하나의 레이어가 애니메이션으로 표시되는 경우) 애니메이션이 끝날 때 모든 레이어가 표시됩니다 (애니메이션 대리인이 animationDidStop에서 애니메이션을 끝내기 전에여러 CALayers를 동시에 성공적으로 애니메이트하려면 어떻게합니까?
이NSArray* path = [board caclulatePath:s];
[CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat:([path count] * 0.25)] forKey:kCATransactionAnimationDuration];
for (int i = 0; i < 20; i++)
{
CALayer* laserLayer = [CALayer layer];
laserLayer.bounds = CGRectMake(s.frame.origin.x, s.frame.origin.y + (10*i), 20, 10);
laserLayer.position = CGPointMake(s.frame.origin.x + (s.frame.size.width/2), s.frame.origin.y + (s.frame.size.height/2) + (10*i));
laserLayer.contents = (id)[UIImage imageNamed:@"Laser.png"].CGImage;
[self.layer addSublayer:laserLayer];
CAKeyframeAnimation* anim = [CAKeyframeAnimation animationWithKeyPath:@"position"];
anim.values = path;
anim.duration = ([path count] * 0.25);
anim.removedOnCompletion = NO;
anim.delegate = self;
anim.rotationMode = kCAAnimationRotateAuto;
[anim setValue:@"Fire" forKey:@"Action"];
[anim setValue:laserLayer forKey:@"Layer"];
[laserLayer addAnimation:anim forKey:nil];
}
[CATransaction commit];
[보드 caclulatePath : S]는 여기서 CGPoints를 나타내는 NSValues의있는 NSArray *를 반환 등)
내가 작성한 코드는 보인다.
동일한 경로를 따라 여러 laser.png 사본을 만들면 어떻게 효과를 낼 수 있습니까? [Laser.png는 20px x 20px 붉은 색 사각형입니다.];
내 질문에 도움이되지는 않지만 조사 할 가치가있는 항목으로 +1 할 것입니다 ... –