Программное создание представлений в IOS (как это работает)?

Немного предыстории: я просматриваю видео CS193P iTune и очень долго застрял в задании 3. По сути, в задании предлагается программно создать настраиваемое представление для отображения фигуры на экране. Кстати, я не использую контроллеры представления.

Я не мог заставить свое представление отображаться, пока я, наконец, не перетащил объект View в Interface Builder и не изменил имя объекта на свой собственный класс представления. Итак, мой вопрос: когда люди говорят о программном создании представления, они просто говорят, что нужно создать класс вручную, но когда вам нужно отобразить его, используйте IB? Не могу избавиться от ощущения, что я что-то неправильно понял?

edit: позвольте мне быть более ясным. Мое пользовательское представление было инициализировано с кадром 0, 0, 200, 150, и drawRect переопределен, чтобы нарисовать в нем квадрат. Мое представление даже не отображается, если попытаться добавить его в главное окно в моем контроллере:

    UIWindow* window = [UIApplication sharedApplication].keyWindow;
[window addSubview:polygonView];

Однако, если использовать перетаскивание представления в IB и изменить класс на мой класс представления, он отображается нормально.

Изменить : Добавлен код. Это метод awakeFromNib моего контроллера, в котором должно быть нарисовано представление.

    - (void)awakeFromNib {
    shape = [[PolygonShape alloc] initWithNumberOfSides:numberOfSidesLable.text.integerValue minimumNumberOfSides:3 maximumNumberOfSides:12];
    polygonView = [[PolygonView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
    UIWindow *window = [UIApplication sharedApplication].keyWindow;
    polygonView.backgroundColor = [UIColor blackColor];
    [window addSubview:polygonView];
    [self updateInterface];  
}

Часть моего контроллера ' s метод updateInterface:

- (void)updateInterface {
    [polygonView setPolygon:shape];
    [polygonView setNeedsDisplay];
...
}

PolygonView.h

#import <UIKit/UIKit.h>
#import "PolygonShape.h"

@interface PolygonView : UIView {
    IBOutlet PolygonShape *polygon; 
}

@property (readwrite, assign) PolygonShape *polygon;

- (void)drawRect:(CGRect)rect;
@end

PolygonView.m

#import "PolygonView.h"

@implementation PolygonView
@synthesize polygon;

- (id)initWithFrame:(CGRect)frame {

    self = [super initWithFrame:frame];
    if (self) {
        nslog(@"initialized");
    }
    return self;
}

- (void)drawRect:(CGRect)rect {
       CGRect bounds = [self bounds];

    [[UIColor grayColor] set];
    UIRectFill(bounds);

    CGRect square = CGRectMake(10, 10, 10, 100);
    [[UIColor blackColor] set];
    UIRectFill(square);

    [[UIColor redColor] set];
    UIRectFill(square);
    NSLog(@"drawRect called");
}
@end

polygonView инициализируется, но drawRect не вызывается.

16
задан subject_x 28 January 2011 в 17:14
поделиться