drawRect:不工作

时间:2010-10-11 22:23:09

标签: iphone objective-c sdk ios

我想在屏幕上的UIView上放置一些“句柄”。

所以,我在UIView的框架矩形的每个角落创建了更多UIView s,我只想绘制一个“填充”矩形的圆圈。 “句柄”UIView的框架。

这就是我的意思:

我如何创建“HandleView”:

CGPoint upperLeft = CGPointMake([[self viewToMove] frame].origin.x - 5, [[self viewToMove] frame].origin.y - 5);
HandleView *uL = [[HandleView alloc] initWithFrame:CGRectMake(upperLeft.x, upperLeft.y, 10, 10)];
[self setUpperLeftHandle:uL];
[uL release];
[[self view] addSubview:[self upperLeftHandle]];

drawRect:for HandleView:

- (void)drawRect:(CGRect)rect {
   // Drawing code
   CGContextRef context = UIGraphicsGetCurrentContext();
   [[UIColor orangeColor] set];
   CGContextFillEllipseInRect(context, [self frame]);
}

我得到的只是一组黑色矩形,我放置了HandleViews。我不确定为什么它们是黑色的,但我可以通过更改[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);
}

现在,我看到了圆圈,但只是在它覆盖另一个视图的地方。它只是坐在“背景”UIView的顶部,我什么都看不到。此外,即使颜色为(100,100,100),它也会显示白色/浅灰色。

这是什么交易?

3 个答案:

答案 0 :(得分:6)

这可能有效:

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

答案 1 :(得分:1)

问题出在以下几行:

CGContextFillEllipseInRect(context,[self frame]);

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

CGContextFillEllipseInRect(context,[self bounds]);

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

因此,在使用框架绘制时,您将偏移Fillellipse矩形位置,这恰好超出了手柄视图的可见矩形。

因此,你无法看到任何东西。

答案 2 :(得分:1)

对于显示为白色的颜色,这是因为CGContextSetRGBFillColor()要求颜色分量值(不是0-255)的值为0.0到1.0。所以,通过100,你实际上传递1.0,这是创建一个白色。