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];
}