2012-04-13 21 views
0

アレイからサブレイヤとして2つのCALayersをビューのレイヤーに追加しようとしています。次のコードでは、試行された最後のサブレイヤだけが追加されます(名前はqです)。私はこれを最初に配列の2つだけで動作させようとしていますので、後でforループを使って多くのものを追加することができます。 2つのサブレイヤを同時に表示するための提案はありますか?Xcode 4に複数のサブレイヤを追加していますか? 1つしか表示されません

ViewController.hは

#import <QuartzCore/QuartzCore.h> 
#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController{ 
    UIImage *beeImage; 

    UIImageView *beeView; 
    CALayer *beeLayer; 
    CABasicAnimation *animation; 

    NSMutableArray *beeArray; 

    } 

@property(retain,nonatomic) UIImage *beeImage; 
@property(retain,nonatomic) NSArray *beeArray; 
@property(retain,nonatomic) UIImageView *beeView; 
@property(retain,nonatomic) CALayer *beeLayer; 
@property(retain,nonatomic)CABasicAnimation *animation; 
-(void) animate; 
-(void) makeSwarm; 

@end 

この

は私はまだ方法がわからないViewController.m

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

-(void) makeSwarm{ 

    self.view.layer.backgroundColor = [UIColor orangeColor].CGColor; 
    self.view.layer.cornerRadius = 20.0; 
    self.view.layer.frame = CGRectInset(self.view.layer.frame, 20, 20); 

    CGRect beeFrame; 
    beeArray = [[NSMutableArray alloc] init]; 
    beeImage = [UIImage imageNamed:@"bee50x55px.png"]; 
    beeFrame = CGRectMake(0, 0, beeImage.size.width, beeImage.size.height); 
    beeView = [[UIImageView alloc] initWithFrame:beeFrame]; 
    beeView.image = beeImage;  
    beeLayer = [beeView layer]; 


    CALayer *p = [[CALayer alloc] init]; 
    CALayer *q = [[CALayer alloc] init]; 


    [beeArray addObject: beeLayer];  
    [beeArray addObject: beeLayer]; 

    p = [beeArray objectAtIndex: 0];  

    [p setPosition:CGPointMake(10, 10)]; 
    p.zPosition=0; 
    [self.view.layer addSublayer:p]; 

    q = [beeArray objectAtIndex: 1];  

    [q setPosition:CGPointMake(160,240)]; 
    q.zPosition=1; 
    [self.view.layer insertSublayer:q below:p];   


} 
+1

これは同じオブジェクトである可能性があります。代わりに '[beeArray addObject:[beeLayer copy]];'を試してください。 – lnafziger

+0

はい、それは同じオブジェクトなので、CALayersはコピーをサポートしていないので、CALayerの全く新しいインスタンスを作成することが最適なオプションになるでしょう。 – Otium

+0

ありがとう!私の最初のグループのアニメーションに行くので、これは私のために必要な前提条件です。問題はポインタの理解が不十分であったことを修正しますか(それは私の新しい概念です)。 –

答えて

0

である(またはそれが可能であれば)コメントで左の答えを受け入れることです。だから、これを答えたものとしてマークするために、最初の正解を引用します。もしこれがここの担当者のlnafzigerに正しく役立たないのなら、申し訳ありませんが、私は何をすべきか分かりません。

lnafzigerは言った...

"それは同じオブジェクトであるため、それはあるかもしれない試してみてください[beeArrayのaddObjectを:[beeLayer]コピー];代わりに - lnafziger。"

これは働いていました。どうもありがとうございました。

関連する問題