sub*_*t_x 16 iphone views objective-c ios
一点背景:我正在浏览CS193P iTune视频,我被困在作业3上的时间最长.基本上,作业要求您以编程方式创建自定义视图以在屏幕上显示形状.顺便说一句,我没有使用任何视图控制器.
在我最终在Interface Builder中拖动View对象并将对象名称更改为我的自定义视图类之前,我无法显示我的视图.所以我的问题是当人们说以编程方式创建一个视图时,他们只是说手动创建类,但是当你需要显示它时使用IB吗?我不禁感到我误解了什么?
编辑:让我更清楚.我的自定义视图已使用0,0,200,150的框架初始化,并且drawRect被覆盖以在其中绘制正方形.如果尝试将其添加到我的控制器中的主窗口,我的视图甚至都不显示:
UIWindow* window = [UIApplication sharedApplication].keyWindow;
[window addSubview:polygonView];
Run Code Online (Sandbox Code Playgroud)
但是,如果使用在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];
}
Run Code Online (Sandbox Code Playgroud)
我的控制器的updateInterface方法的一部分:
- (void)updateInterface {
[polygonView setPolygon:shape];
[polygonView setNeedsDisplay];
...
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
正在初始化polygonView,但未调用drawRect.
Sus*_*cob 17
为了更具体地解决您的问题,语法将是
UIWindow* window = [UIApplication sharedApplication].keyWindow;
UIView *polygonView = [[UIView alloc] initWithFrame: CGRectMake ( 0, 0, 200, 150)];
//add code to customize, e.g. polygonView.backgroundColor = [UIColor blackColor];
[window addSubview:polygonView];
[polygonView release];
Run Code Online (Sandbox Code Playgroud)
这是一种模式,不仅可用于此,还可用于子视图.另外,另一个注意事项是许多模板,viewController已经设置了它自己的视图.当您想要创建自定义视图时,您可以像上面一样创建它,但不是上面的方法,而是将viewControllers视图设置为新创建的视图,如下所示:
viewController.view = polygonView;
Run Code Online (Sandbox Code Playgroud)
祝好运!
归档时间: |
|
查看次数: |
67220 次 |
最近记录: |