ちょっとした背景:私はCS193P iTuneのビデオを見ていますが、私は最も長い間割り当て3に固執していました。基本的には、画面上に図形を表示するためのカスタム表示をプログラムで作成するように指示されています。私は途中でビューコントローラを使用していません。IOSでプログラムでビューを作成する(どのように機能するのですか?)
最終的にInterface BuilderでViewオブジェクトをドラッグしてオブジェクト名をカスタムビュークラスに変更するまでは、私のビューを表示できませんでした。だから私の質問は、人々がプログラムでビューを作成すると言っている、彼らは単に手動でクラスを作成すると言っているが、あなたはそれを表示する必要がIBを使用する必要がありますか?私は何かを誤解したような気分を助けることができないのですか?
編集:もっと明確にしてください。私のカスタムビューは、0,0,200,150のフレームで初期化されており、drawRectは、その中に正方形を描画するためにオーバーライドされています。試しに私のコントローラ内のメインウィンドウに追加する場合は私のビューにも表示されません:使用ドラッグはIBのビューとは、私のビュークラスにクラスを変更した場合
UIWindow* window = [UIApplication sharedApplication].keyWindow;
[window addSubview:polygonView];
しかし、それは罰金を示しています。
編集:いくつかのコードを追加しました。これは私のコントローラの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
AppDelegateクラスで作成されています。これは、#私のpolygonViewクラスをそこにインポートしてそこに作成する必要があるということですか? –
面白いことに、私の初期化を行い、私のビューを私のupdateInterfaceメソッドのウインドウに追加すると、それは動作しますが、メソッドを呼び出すボタンをクリックした後です。コードがawakeFromNibのプロセスではないようです。何か案は? –