2010-12-03 73 views
2

我一直坚持这一段时间,所以任何帮助将不胜感激。添加UIImageView到UIView

我基本上做了一个叫做shape的类,它是一个UIView,我想添加一个UIImageView到那个UIView

这里是我的.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代码转换为目标,上面的代码是我的第一次尝试,显然没有需要完成的地方,但你可以看到我想要达到的目标,抱歉,但是我完全新的目标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

你有没有试过向它添加实际图像? – 2010-12-03 15:17:10

+0

你可以使用代码块按钮吗?它使您的代码更易于阅读。你还在哪里尝试添加图像? – BOMEz 2010-12-03 15:27:34

回答

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实现负责删除和释放子视图。

希望有帮助!