我有这段代码:
CGColorRef darkColor = [[UIColor colorWithRed:21.0/255.0 green:92.0/255.0 blue:136.0/255.0 alpha:1.0] CGColor];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, darkColor);
CGContextFillRect(context, CGRectMake(18, 62, 66, 66));
我只是将它放在我视图的viewdidload方法中,但我的视图与以前没什么不同。我试过让它变得非常大而且明亮的红色,但它只是没画画。我需要一些其他初始化代码吗?
编辑:在给出给我的答案后,我现在在我的veiwdidload中有这个:
[self.view addSubview:[[[imageBackground alloc] init] autorelease]];
并在imageBackground.m中:
@implementation imageBackground
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
self.opaque = YES;
self.backgroundColor = [UIColor clearColor];
}
return self;
}
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
CGColorRef darkColor = [[UIColor colorWithRed:21.0/255.0 green:92.0/255.0 blue:136.0/255.0 alpha:1.0] CGColor];
darkColor = [[UIColor colorWithRed:255.0 green:0.0 blue:0.0 alpha:1.0] CGColor];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, darkColor);
CGContextFillRect(context, CGRectMake(18, 62, 66, 66));
}
@end
Imagebackground.h子类UIView:
#import <UIKit/UIKit.h>
@interface imageBackground : UIView
@end
但我仍然没有得到任何结果。
EDIT2:嗯,我自己解决了,但后来意识到progrmr已经告诉我如何解决它。我不得不使用[self.view addSubview:[[[imageBackground alloc] initWithFrame:CGRectMake(0, 0, 320, 480)] autorelease]];
而不是普通的alloc init。
感谢glorifiedhacker提供了很多帮助!
答案 0 :(得分:7)
您需要继承UIView(或其子类之一)并覆盖drawRect方法:
- (void)drawRect:(CGRect)rect {
CGColorRef darkColor = [[UIColor colorWithRed:21.0/255.0 green:92.0/255.0 blue:136.0/255.0 alpha:1.0] CGColor];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, darkColor);
CGContextFillRect(context, CGRectMake(18, 62, 66, 66));
}
以获得可以绘制的有效图形上下文。来自Apple的documentation on UIView:
根据需要查看绘图。首次显示视图时 或者当全部或部分因布局变化而变得可见时, 系统要求视图绘制其内容。对于包含的视图 使用UIKit或Core Graphics的自定义内容,系统调用 view的drawRect:方法。你实现这个方法是 负责将视图的内容绘制到当前图形中 上下文,由系统在调用之前自动设置 这种方法。这会创建一个静态的视觉表示 视图的内容随后可以显示在屏幕上。
答案 1 :(得分:1)
没有子类化的最简单方法是整个代码的过程。
void DrawRectFrame(CGContext c, CGRect rc)
{
CGContextMoveToPoint(c, rc.origin.x, rc.origin.y);
CGContextAddLineToPoint(c, rc.origin.x+rc.size.width, rc.origin.y);
CGContextMoveToPoint(c, rc.origin.x+rc.size.width, rc.origin.y);
CGContextAddLineToPoint(c, rc.origin.x+rc.size.width, rc.origin.y+rc.size.height);
CGContextMoveToPoint(c, rc.origin.x+rc.size.width, rc.origin.y+rc.size.height);
CGContextAddLineToPoint(c, rc.origin.x, rc.origin.y+rc.size.height);
CGContextMoveToPoint(c, rc.origin.x, rc.origin.y+rc.size.height);
CGContextAddLineToPoint(c, rc.origin.x, rc.origin.y);
}