我想在屏幕上的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),它也会显示白色/浅灰色。
这是什么交易?
答案 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,这是创建一个白色。