2014-02-23 1 views
1

동일한 크기의 2 개의 CALayers를 생성했으며 아래의 방법으로이를 전달합니다. 그러나 두 레이어가 함께 실행됩니다. 둘을 구분할 수 있도록 어떻게 분리 할 수 ​​있습니까?2 개의 레이어를 하나의 베지에 경로를 따라 다른 하나를 감추지 않고 두는 법

- (void) myAnimation : (CALayer *) sublayer { 
    UIBezierPath* aPath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(30, 100, 270, 270)]; 

    CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 
    anim.path = aPath.CGPath; 
    anim.rotationMode = kCAAnimationRotateAuto; 
    anim.repeatCount = HUGE_VALF; 
    anim.duration =35.0; 
    [sublayer addAnimation:anim forKey:@"race"]; 
} 
+0

다른 'beginTime'을 주려고 했습니까? –

+0

에는 이러한 레이어를 사용하는 두 개의 메소드 호출간에 지연이 있습니다. – santhu

+0

각기 다른 색상을 사용하고 각 경로를 약간 반투명하게 만드는 것은 어떻습니까? 그리고 각 경로에 대해 획 폭이 다른 것은 어떨까요? –

답변

0

경로는 같은 지점에서 시작하고 끝납니다. 두 시작 시간이 같고 지속 시간이 같다고 가정하면 레이어가 정확하게 겹칩니다. 시작 시간을 이동하거나 회전시킬 수 있습니다 UIBezierPath* aPath 다음은 UIBezierPath* aPath을 회전하고 재생 시간을 변경하는 예입니다. 재생 시간, 시작 시간, 회전 등을 어떻게 바꿀 수 있는지 생각해보아야합니다.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self.view setBackgroundColor:[UIColor blackColor]]; 
    CALayer * layer1 = [CALayer layer]; 
    CALayer * layer2 = [CALayer layer]; 
    [layer1 setFrame:CGRectMake(0, 0, 5, 50)]; 
    [layer2 setFrame:CGRectMake(0, 0, 5, 100)]; 
    layer1.backgroundColor = [[UIColor colorWithRed:.1 green:.5 blue:1 alpha:.35] CGColor]; 
    layer2.backgroundColor = [[UIColor colorWithRed:.9 green:.2 blue:.5 alpha:.35] CGColor]; 
    [self.view.layer addSublayer:layer1]; 
    [self.view.layer addSublayer:layer2]; 
    [self myAnimation:layer1 andRotation:0 andDuration:35.0]; 
    [self myAnimation:layer2 andRotation:10 andDuration:10.0]; 
} 
- (void) myAnimation:(CALayer *)sublayer andRotation:(CGFloat)rot andDuration:(CFTimeInterval)dur { 
    CGRect rect = CGRectMake(30, 100, 270, 270); 
    UIBezierPath* aPath = [UIBezierPath bezierPathWithOvalInRect:rect]; 
    // Creating a center point around which we will transform the path 
    CGPoint center = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect)); 
    CGAffineTransform transform = CGAffineTransformIdentity; 
    transform = CGAffineTransformTranslate(transform, center.x, center.y); 
    transform = CGAffineTransformRotate(transform, rot); 
    // Recenter the transform 
    transform = CGAffineTransformTranslate(transform, -center.x, -center.y); 
    // This is the new path we will use. 
    CGPathRef rotated = CGPathCreateCopyByTransformingPath(aPath.CGPath, &transform); 
    CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 
    anim.path = rotated; 
    anim.rotationMode = kCAAnimationRotateAuto; 
    anim.repeatCount = HUGE_VALF; 
    anim.duration =dur; 
    [sublayer addAnimation:anim forKey:@"race"]; 
}