2012-05-02 3 views
0

以下のコードを使用して、必要に応じてサブレイヤ1 &サブレイヤ2を描画します。アニメーションが発生すると、サブレイヤ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];[sublayer1 addSublayer:sublayer2];である必要がありますか?

+0

はい。それはタイプミスです。それを修正する。 – David