2010-12-03 20 views
2

Ich bin schon eine Weile auf dieser Sache fest, so dass jede Hilfe sehr geschätzt wird.Hinzufügen einer UIImageView zu einer UIView

Ich habe im Grunde genommen eine Klasse namens Shape, die eine UIView ist, und ich möchte eine UIImageView zu dieser UIView hinzufügen.

Hier ist meine .h-Datei:

@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 

Und hier ist meine .m-Datei:

@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 

Vielen Dank!

Hey nochmal Entschuldigung wenn das verwirrend ist, aber ich versuche diesen cisc Code ins Ziel zu portieren, der obige Code ist mein erster Versuch und ist offensichtlich nicht wo ich fertig bin aber du kannst hoffentlich sehen was ich versuche zu erreichen, sorry, aber im völlig neu in Objective C, und es ist ganz anders als andere Sprachen, die ich verwenden bin: 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

haben Sie versucht, ein tatsächliches Bild hinzuzufügen? –

+0

Können Sie die Codeblock-Taste verwenden? Es macht Ihren Code für alle leichter lesbar. Auch wo versuchst du das Bild hinzuzufügen? – BOMEz

Antwort

4

(gelöschter alter Text)

Eigentlich, was Sie in Ihrem C# -Code isn tun Das ist in Objective-C anders (dieser Code ist nicht getestet!):

In der Header-Datei:

#import <UIKit/UIKit.h> 

@interface ShapeView : UIView { 

} 

@end 

Implementierungsdatei:

#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 

Diese Implementierung fügt einfach die UIImageViews als Subviews. Beachten Sie, dass die blockView zugeordnet und konfiguriert ist, dann als Unteransicht von self hinzugefügt. Der Aufruf von -addSubview: behält die neue Unteransicht bei und fügt sie tatsächlich der Ansichtshierarchie hinzu. Daher wird blockView sofort freigegeben. Wenn das gesamte Objekt ShapeView freigegeben wird, kümmert sich die UIView-Implementierung -dealloc um das Entfernen und Freigeben der Untersichten.

Hoffe, dass hilft!

+0

Schließlich werde ich die UIView mit mehreren UIImageViews füllen wollen, ich begann damit, es in monodevelop zu schreiben, aber jetzt bin ich fest, wie ich gebeten wurde, es auf Ziel c zu portieren. Ich kann Ihnen den alten cis-Code zeigen, wenn das hilft. Ich habe nicht vor, den Interface Builder zu benutzen, damit ich das IBOutlet entfernen kann? – IainNotAndrew

+0

Hey, Vielen Dank der Code sieht tatsächlich sehr ähnlich zu meinem C# -Code, so ist es sehr einfach für mich zu lesen :) Allerdings bekomme ich den folgenden Fehler mit der Zeile unter "if ((self = [super initWithFrame : frame])! = nil) " // keine Superklasse in @interface für 'ShapeView' deklariert – IainNotAndrew

+0

Ja, sorry, ich habe die' # import' Anweisungen weggelassen. Jetzt sind sie im obigen Code. Ich habe auch einen Fehler beim Kopieren und Einfügen behoben ('kBlockWidth' und' kBlockHeight' wurden falsch geschrieben). Es kompiliert für mich jetzt. –

Verwandte Themen