Iphone drawRect:isn';行不通

Iphone drawRect:isn';行不通,iphone,objective-c,sdk,ios,Iphone,Objective C,Sdk,Ios,我想在屏幕上的ui视图上放置一些“句柄” 因此,我正在创建更多的UIViews,在UIView的框架矩形的每个角上都有一个,我只想画一个圆来“填充”作为“句柄”UIView框架的矩形 我的意思是: 我如何创建“HandleView”: drawRect:对于HandleView: 我得到的只是一组黑色的长方形,在那里我放置了HandleView。我不确定它们为什么是黑色,但我可以通过更改[HandleView backgroundColor]属性来更改颜色。然而,我无法从这一观点中得出任何结论。

我想在屏幕上的
ui视图上放置一些“句柄”

因此,我正在创建更多的
UIView
s,在
UIView
的框架矩形的每个角上都有一个,我只想画一个圆来“填充”作为“句柄”
UIView
框架的矩形

我的意思是:

我如何创建“HandleView”:

drawRect:对于HandleView:

我得到的只是一组黑色的长方形,在那里我放置了HandleView。我不确定它们为什么是黑色,但我可以通过更改
[HandleView backgroundColor]
属性来更改颜色。然而,我无法从这一观点中得出任何结论。调用
setNeedsDisplay
似乎没有任何区别

另外,正在调用
drawRect:
方法,因此那里的代码有问题,可能不是其他地方

我已经有一段时间没有搞自定义绘图了,但我不记得有这么难

我错过了什么

谢谢

更新:

将代码修改为:

- (id)initWithFrame:(CGRect)frame {
    if ((self = [super initWithFrame:frame])) {
        // Initialization code
    [self setBackgroundColor:[UIColor clearColor]];
    }
    return self;
}

- (void)drawRect:(CGRect)rect {
    // Drawing code
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor(context, 100, 100, 100, 1.0);
    CGContextFillEllipseInRect(context, rect);
}
现在,我看到了圆,但只在它覆盖另一个视图的地方。在“背景”视图的顶部,我看不到任何东西。此外,即使颜色是(100100100),它也会显示为白色/浅灰色

怎么办?

这可能会奏效:

- (void)drawRect:(CGRect)rect {
    // Drawing code
    [[UIColor orangeColor] setFill];
    [[UIBezierPath bezierPathWithOvalInRect:rect] fill];
}

以下行有问题:

CGContextFillEllipseInRect(上下文,[自框架])

您需要将其更改为以下内容:

CGContextFillEllipseInRect(上下文,[自边界])

框架原点是父视图中视图的左上角位置。因此,它可以是父视图大小限制内的任何值

因此,在使用框架绘制时,您将偏移恰好位于控制柄视图的可见矩形之外的Fillellipse矩形位置


因此,您什么也看不见。

至于显示为白色的颜色,这是因为CGContextSetRGBFillColor()期望颜色分量值为0.0到1.0(而不是0-255)。所以,通过100,你实际上通过了1.0,这创造了一种白色。

Uhm,我会尝试使用CGContextSetRGBFillColor而不是[[UIColor orangeColor]set]。另外,避免在该方法中使用[self frame]:您已经将rect作为参数传递,使用该参数或使用cgcontextgetclipboondingbox获取剪辑框。CGContext参考和Quartz 2D编程指南很好地涵盖了这个主题。是的,[[UIColor orangeColor]set]行是一个错误。我把它拿出来,把[自我框架]改成了rect,但仍然没有骰子。有什么想法?我不习惯在这里提问。。。是否有方法将此标记为已解决或保持“打开”?请注意,传入的rect并不总是视图的边界。因此使用[self-bounds]比使用rect更正确。
- (id)initWithFrame:(CGRect)frame {
    if ((self = [super initWithFrame:frame])) {
        // Initialization code
    [self setBackgroundColor:[UIColor clearColor]];
    }
    return self;
}

- (void)drawRect:(CGRect)rect {
    // Drawing code
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor(context, 100, 100, 100, 1.0);
    CGContextFillEllipseInRect(context, rect);
}
- (void)drawRect:(CGRect)rect {
    // Drawing code
    [[UIColor orangeColor] setFill];
    [[UIBezierPath bezierPathWithOvalInRect:rect] fill];
}