2010-12-03 2 views
2

Ive застрял на этом какое-то время, поэтому любая помощь будет принята с благодарностью.Добавить UIImageView в UIView

У меня есть класс, называемый формой, который является 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 

Большое спасибо!

Эй, извините, если это сбивает с толку, но я пытаюсь перенести этот острый код в цель, код выше - моя первая попытка и, очевидно, нет, где нужно закончить, но вы можете надеяться увидеть, что я пытаюсь добиться, извините, но Im совершенно новым для Objective 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 берет на себя удаление и освобождение подпунктов.

Надеюсь, что это поможет!