我的Bezier路径在哪里?

时间:2015-11-18 22:04:27

标签: ios objective-c

我正在尝试绘制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

调用

1 个答案:

答案 0 :(得分:3)

UIGraphicsBeginImageContext / UIGraphicsEndImageContext调用创建一个可以绘制的离屏上下文,然后从中提取图像。由于这是一个屏幕外的背景,因此屏幕上没有任何内容。

您可能想要做的是创建一个覆盖drawRect的UIView的自定义子类。在响应用户手势的代码中,更改代表绘图的数据结构,然后调用setNeedsDisplay以触发系统通过调用drawRect方法让您的视图重绘自己。

作为替代方案,您可以设置自定义视图以在视图中安装CAShapeLayer,然后更改图层上的路径,然后在图层上调用setNeedsDisplay