2010-12-03 15 views
2

これでしばらくの間これに取り掛かりましたので、どんな助けでも大歓迎です。UIViewにUIImageViewを追加します

私は基本的にUIViewという形のクラスを作成しましたが、UIViewUIImageViewを追加したいと思います。

は、ここに私の.hファイルである:

@interface Shape : UIView { 

int blockWidth; 
int blockHeight; 
NSString *colour; 

IBOutlet UIImageView *blockView; 

} 

@property (nonatomic, retain) IBOutlet UIImageView *blockView; 
@property (nonatomic, retain) NSString *colour; 

-(void)setColour:(NSString *)colour; 
-(void)createShape:(int)blocksX :(int)blocksY; 


@end 

そして、ここに私の.mファイルです:

@implementation Shape 

@synthesize blockView; 
@synthesize colour; 

- (void)setColour:(NSString *)colour{ 
NSLog(@"Colour: %@", colour); 
} 

-(void)createShape:(int)blocksX :(int)blocksY{ 
self.frame = CGRectMake(0, 0, 200, 200); 
blockView.frame = CGRectMake(0, 0, 100, 100); 

self.backgroundColor = [UIColor greenColor]; 
blockView.backgroundColor = [UIColor redColor]; 
[self addSubview:blockView]; 

} 

- (void)dealloc { 

[blockView release]; 
[colour release]; 
[super dealloc]; 
} 


@end 

どうもありがとう!

これは混乱していますが、目的にこのシャープコードを移植しようとしている場合、上記のコードは最初の試みであり、明らかに必要な箇所はありませんが、申し訳ありませんが、イム完全に客観的Cに新しい、私がに使用しています他の言語に完全に異なっている:S

public class Shape : UIView 
    { 
     public UIImageView blockView; 

     private int blockWidth = 40; 
     private int blockHeight = 40; 


     public Shape (int startX, int startY ,string colour, int blocksX, int blocksY) 
     { 
      Console.WriteLine("Colour: "+colour+" Blocks: "+blocksX+" "+blocksY); 

      this.Frame = new RectangleF(startX,startY,blockWidth*blocksX,blockHeight*blocksY); 
      this.UserInteractionEnabled = true; 


      for(int i = 0; i<blocksX; i++) 
      { 
       for(int j = 0; j<blocksY; j++) 
       { 
        blockView = new UIImageView(UIImage.FromFile("Images/Blocks/"+colour+"block.jpg")); 
        blockView.Frame = new RectangleF(blockWidth*i,blockHeight*j,blockWidth,blockHeight); 
        Console.WriteLine("I: "+i+" J: "+j); 
        this.AddSubview(blockView); 
       } 
      } 
     } 
+1

実際の画像を追加しようとしましたか? –

+0

コードブロックボタンを使用できますか?コードを誰にでも読みやすくします。また、どこにイメージを追加しようとしますか? – BOMEz

答えて

4

(削除された古いテキスト)

実は、あなたがC#コードのISNで何をやっていますObjective-Cの違いはありません(このコードはテストされていません!):

ヘッダファイルで:

#import <UIKit/UIKit.h> 

@interface ShapeView : UIView { 

} 

@end 

実装ファイル:

#import "ShapeView.h" 

#define kBlockWidth 40 
#define kBlockHeight 40 

@implementation ShapeView 

- (id)initWithStartX:(int)startX startY:(int)startY colour:(NSString*)colour blocksX:(int)blocksX blocksY:(int)blocksY 
{ 
    CGRect frame = CGRectMake(startX, startY, kBlockWidth * blocksX, kBlockHeight * blocksY); 

    if ((self = [super initWithFrame:frame]) != nil) 
    { 
     for (int i = 0; i < blocksX; i++) 
     { 
      for (int j = 0; j < blocksY; j++) 
      { 
       UIImage* image = [UIImage imageNamed:[NSString stringWithFormat:@"Images/Blocks/%@block.jpg", colour]]; 
       UIImageView* blockView = [[UIImageView alloc] initWithImage:image]; 

       blockView.frame = CGRectMake(kBlockWidth * i, 
              kBlockHeight * j, 
              kBlockWidth, 
              kBlockHeight); 

       [self addSubview:blockView]; 
       [blockView release]; 
      } 
     } 
    } 

    return self; 
} 

@end 

この実装は単にサブビューとしてUIImageViewsを追加します。 blockViewが割り当てられ、設定されてから、selfのサブビューとして追加されます。 -addSubview:を呼び出すと、新しいサブビューが保持され、実際にビュー階層に追加されます。したがって、すぐにblockViewがリリースされます。 ShapeViewオブジェクト全体が割り当て解除されると、UIViewの-dealloc実装はサブビューの削除と解放を行います。

希望に役立ちます!

+0

最終的に私は複数のUIImageViewsでUIViewを塗りたいと思っていますが、私はモノデベロッパーで書くようになっていましたが、現在私はそれを目的のcに移植するように求められています。それが役に立ったら、古いCのコードを見せてもらうことができます。私はIBOutletを削除することができますか? – IainNotAndrew

+0

こんにちは、ありがとうたくさんのコードは実際に私のC#のコードに非常に似ているので、私は読むのはとても簡単です:) しかし、私は以下の行で次のエラーを取得します "if((self = [super initWithFrame :frame])!= nil) " //" ShapeView "の@interfaceで宣言されたスーパークラスはありません – IainNotAndrew

+0

申し訳ありませんが、私は'#import'ステートメントを省略しました。今、彼らは上記のコードにあります。コピー&ペーストエラー( 'kBlockWidth'と' kBlockHeight'のスペルが間違っていた)を修正しました。それは今私のためにコンパイルされます。 –

関連する問題