Немного предыстории: я просматриваю видео 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];
}
Часть метода 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 не вызывается.