drawRect:被调用,只显示框架而不是图形

时间:2013-09-23 19:29:03

标签: objective-c cocoa drawrect uibezierpath

我有一个UIControl子类,我实现了drawRect。我正在尝试使用drawRectUIBezierPath方法内绘制一个矩形。正在调用所有适当的方法,没有任何内容为null,应用程序运行时没有任何问题。问题是,只绘制了框架。意思是,我可以看到框架的区域,因为它是黑色的,但我看不到画在框架上的任何东西。

以下是我要实例化类的内容:

ZHButton *button =
    [[ZHButton alloc] initWithFrame:CGRectMake(100, 200, 100, 50)];
button.buttonType = NSSelectorFromString(LEFT_ROUNDED_CORNER_BUTTON);
[self.view addSubview:button];

这是drawRect:方法,它使用选择器调用不同的方法:

- (void)drawRect:(CGRect)rect {
    UIBezierPath *button = [self performSelector:self.buttonType withObject:nil];
    [[UIColor orangeColor] setFill];
    [button fill];
}

- (UIBezierPath *)drawButtonWithLeftCornersRounded {
        return [UIBezierPath bezierPathWithRoundedRect:self.frame
                                     byRoundingCorners:UIRectCornerTopLeft |
                                                       UIRectCornerBottomLeft
                                           cornerRadii:buttonRadii];
}

一切似乎都运转正常,但UIBezierPath没有被绘制出来。此外,不确定使用选择器是否是最好的方法。有人知道这是怎么回事吗?

2 个答案:

答案 0 :(得分:0)

您似乎没有调用drawButtonWithLeftCornersRounded方法。我认为这一行是错误的:

[self performSelector:self.buttonType withObject:nil];

但它应该是:

[self performSelector:@selector(drawButtonWithLeftCornersRounded) withObject:nil];

希望这有帮助!

答案 1 :(得分:0)

解决了它。在drawButtonWithLeftCornersRounded bezierPathWithRoundedRect中不应该是self.frame。这将导致x和y坐标位于框架内的x,y位置,而不是视图。我将参数更改为:

CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height);