Добавить UIImageView в UIView - PullRequest
       5

Добавить UIImageView в UIView

2 голосов
/ 03 декабря 2010

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

В основном я создал класс под названием 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

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

Привет еще раз извините, если это сбивает с толку, но я пытаюсь перенести этот четкий код в объектив, приведенный выше код - моя первая попытка, и, очевидно, нет нужды завершать ее, но вы можете надеяться, что вы пытаетесь понять,извините, но я совершенно новичок в 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 Ответ

4 голосов
/ 03 декабря 2010

(удаленный старый текст)

На самом деле, то, что вы делаете в своем коде на C #, ничем не отличается в 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 освобожден, реализация -dealloc UIView заботится об удалении и освобождении подпредставлений.

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

...