我正在尝试绘制Bezier路径,一个给定角度的弧,以响应平移手势。这是我在pan手势调用的函数中所拥有的内容:
UIGraphicsBeginImageContext(self.frame.size);
UIBezierPath *path = [self createArcPath];
[[UIColor blackColor] setStroke];
[[UIColor redColor] setFill];
CGContextRef *ref = UIGraphicsGetCurrentContext();
path.lineWidth = 5;
[path fill];
[path stroke];
UIGraphicsEndImageContext();
这是createArcPath
:
- (UIBezierPath *)createArcPath
{
UIBezierPath *aPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(150, 150)
radius:75
startAngle:0
endAngle:DEGREES_TO_RADIANS(135)
clockwise:YES];
return aPath;
}
我没有收到错误,但我的屏幕上没有任何关于弧线的信息。我错过了什么?这是一个UIView
子类的方法。
我还在- (id)initWithFrame
中尝试了以下方法:
UIColor *color =[UIColor redColor];
UIGraphicsBeginImageContext(self.frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, width);
CGContextSetFillColorWithColor(context, color.CGColor);
CGContextSetStrokeColorWithColor(context, color.CGColor);
CGRect myOval = {100, 100, self.radius, self.radius};
CGContextAddEllipseInRect(context, myOval);
UIGraphicsEndImageContext();
我也什么也看不见。我错过了什么?这些方法是否可以从UIView
?
答案 0 :(得分:3)
UIGraphicsBeginImageContext / UIGraphicsEndImageContext调用创建一个可以绘制的离屏上下文,然后从中提取图像。由于这是一个屏幕外的背景,因此屏幕上没有任何内容。
您可能想要做的是创建一个覆盖drawRect的UIView的自定义子类。在响应用户手势的代码中,更改代表绘图的数据结构,然后调用setNeedsDisplay
以触发系统通过调用drawRect方法让您的视图重绘自己。
作为替代方案,您可以设置自定义视图以在视图中安装CAShapeLayer,然后更改图层上的路径,然后在图层上调用setNeedsDisplay
。