2012-05-02 2 views
0

Используя следующий код, подслоер1 & sublayer2 нарисованы там, где это необходимо. Когда происходит анимация, подслой1 движется так, как ожидалось, в то время как подуровень2 сначала перемещается вверх-вниз, а затем вниз-вправо. (2 не остается в одном и том же месте в пределах 1)Что препятствует перемещению подуровня с родителем?

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    // Create a blue sublayer 
    sublayer1 = [CALayer layer]; 
    sublayer1.backgroundColor = [[UIColor blueColor] CGColor]; 
    sublayer1.frame = CGRectMake(30, 30, 120, 190); 
    sublayer1.position = CGPointMake(90, 130); 
    [self.view.layer addSublayer:sublayer1]; 

    // Create a sublayer within blue layer 
    CALayer *sublayer2 = [CALayer layer]; 
    sublayer2.bounds = CGRectMake(0, 0, 60, 60); 
    sublayer2.frame = CGRectMake(30, 50, 60, 60); 
    sublayer2.contents = (id)[[UIImage imageNamed:@"sun.png"] CGImage]; 
    [sublayer1 addSublayer:sublayer2]; 

    [self performSelector:@selector(moveBlueLayer) withObject:nil afterDelay:1.0]; 
} 

- (void)moveBlueLayer 
{ 
    // Create a new position for animation to move to 
    CGPoint endPostition = CGPointMake(190, 285); 

    [CATransaction setAnimationDuration:4]; 
    sublayer1.bounds = CGRectMake(130, 190, 120, 190); 
    sublayer1.position = endPostition; 
} 

Разве они не должны двигаться вместе? Любые идеи, почему они этого не делают? На данный момент я пытаюсь использовать решения для неявной анимации.

+0

Преступник находится в 3-й линии снизу. 'sublayer1.bounds' не должен быть установлен. – David

ответ

0

Линия 3-го вверху снизу вызывала неустойчивое поведение.

- (void)moveBlueLayer 
{ 
    // Create a new position for animation to move to 
    CGPoint endPostition = CGPointMake(190, 285); 

    [CATransaction setAnimationDuration:4]; 
    // Next line causing the problem 
    // sublayer1.bounds = CGRectMake(130, 190, 120, 190); 
    sublayer1.position = endPostition; 
} 
0

Не должно быть [sublayer1 addSublayer:flowerlayer]; be [sublayer1 addSublayer:sublayer2];?

+0

Да. Это опечатка. Исправить это. – David

Смежные вопросы