稍微背景:我正在瀏覽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