Небольшой фон: я просматриваю видео в формате CS193P iTune, и я застрял в задании 3 в течение самого долгого времени. В основном, задание запрашивает у вас программное создание пользовательского представления для отображения формы на экране. Кстати, я не использую никаких контроллеров.
Мне не удалось отобразить мое представление, пока я, наконец, не перетащил объект View в Interface Builder и не изменил имя объекта в свой пользовательский класс просмотра. Поэтому мой вопрос заключается в том, когда люди говорят, что программно создают представление, просто они говорят, что вручную создают класс, но когда вам нужно отображать его, используйте IB? Я не могу не чувствовать, что я что-то не понял?
изменить: позвольте мне быть более ясным. Мое пользовательское представление было инициализировано фреймом 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 не вызывается.