稍微背景:我正在浏览CS193P iTune视频,并且我在作业3上停留时间最长。基本上,分配会要求您以编程方式创建自定义视图以在屏幕上显示形状。顺便说一下,我没有使用任何视图控制器。以编程方式在IOS中创建视图(它是如何工作的)?
我无法让我的视图显示,直到我终于在Interface Builder中拖动一个View对象,并将对象名称更改为我的自定义视图类。所以我的问题是,当人们说以编程方式创建一个视图,他们只是说手动创建类,但是当你需要显示它使用IB?我不禁感到我误解了某些东西?
编辑:让我更清楚。我的自定义视图已用0,0,200,150帧初始化,并且drawRect被重写以在其中绘制方形。我的看法甚至不显示了,如果尝试我的控制器内将其添加到主窗口:
UIWindow* window = [UIApplication sharedApplication].keyWindow;
[window addSubview:polygonView];
但是,如果使用拖放在IB的视图,并更改类到我的视图类,它显示了罚款。
编辑:添加了一些代码。这是我的控制器的awakeFromNib方法,应该绘制视图。我控制器updateInterface方法
- (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];
}
部分:
- (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正在初始化,但ISN的drawRect不会被打扰d。
keyWindow在哪里被创建?如果你没有加载nib文件(从你的问题中不清楚你是否是),那么在添加子视图之前,你必须先创建窗口。 – jlehr 2011-01-27 22:24:14
它正在AppDelegate类中创建。这是否意味着我必须#import我的PolygonView类并在那里创建它? – 2011-01-28 05:13:22
有趣的是,如果我把我的视图的初始化和添加到我的updateInterface方法的窗口,它的工作原理,但只有当我点击一个调用该方法的按钮后。看起来好像代码不在awakeFromNib中进行处理。有任何想法吗? – 2011-01-28 18:44:24