0

我创建了一个子类 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];
}

还有我的视图控制器

#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
4

1 回答 1

1

CGRect您的方法drawRect:中使用的不正确。你想要一个CGRect相对于视图的。这意味着原点将是 0,0。此外,应该在运行时根据视图的边界计算矩形。不要将其硬编码到drawRect:. 无论使用什么框架创建视图,这都会使代码正常工作。

您现在使用的矩形(indrawRect:的 y 原点为 171.5,但视图的高度仅为 139。所以您所做的所有绘图都在视图之外。这就是它显示为黑色的原因。

你可能想要:

CGRect bounds = self.bounds;
UIBezierPath* rectanglePath = [UIBezierPath bezierPathWithRect:bounds];
于 2013-06-23T04:16:38.370 回答