我创建了一个子类UIView的类。在drawRect中,我应该绘制一个橙色矩形。然而它显示为黑色。
在我的自定义课程中:
#import "testRect.h"
@implementation testRect
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
}
return self;
}
- (void)drawRect:(CGRect)rect
{
//// Color Declarations
UIColor* strokeColor = [UIColor colorWithRed: 0 green: 0 blue: 0 alpha: 1];
UIColor* fillColor2 = [UIColor colorWithRed: 0.886 green: 0.59 blue: 0 alpha: 1];
//// Rectangle Drawing
UIBezierPath* rectanglePath = [UIBezierPath bezierPathWithRect: CGRectMake(26.5, 171.5, 265, 139)];
[fillColor2 setFill];
[rectanglePath fill];
[strokeColor setStroke];
rectanglePath.lineWidth = 1;
[rectanglePath stroke];
}
我的viewcontroller
#import "ViewController.h"
#import "testRect.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
testRect *test = [[testRect alloc] initWithFrame:CGRectMake(10, 10, 265, 139)];
[self.view addSubview:test];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
答案 0 :(得分:1)
CGRect
方法中使用的drawRect:
不正确。您想要一个相对于视图的CGRect
。这意味着原点将是0,0。此外,应根据视图的边界在运行时计算rect。不要在drawRect:
中对其进行硬编码。无论用于创建视图的帧是什么,这都将使代码正常工作。
你现在使用的矩形(在drawRect:
中的y原点是171.5但是视图的高度只有139.所以你所做的所有绘图都在视图之外。这就是为什么它看起来是黑色的。
你可能想要:
CGRect bounds = self.bounds;
UIBezierPath* rectanglePath = [UIBezierPath bezierPathWithRect:bounds];