贝塞尔路径在视野中不可见

时间:2014-04-14 16:24:17

标签: ios objective-c

我从Stanford ios7课程中复制了以下代码,用于向视图添加Bezier路径。但是,当我在ViewDidLoad中包含此代码时,它没有在屏幕上显示任何内容

 UIBezierPath *path = [[UIBezierPath alloc] init];
    [path moveToPoint:CGPointMake(75, 10)];
    [path addLineToPoint: CGPointMake(160, 150)];
    [path addLineToPoint:CGPointMake(10, 150)];
    [[UIColor whiteColor] setStroke];
    [[UIColor whiteColor] setFill];
    [path stroke];
    [path fill];

之后,我添加了这个日志语句NSLog(@"path: %@", path);,它打印出这个不祥的错误信息。

  

这是一个严重的错误。此应用程序或它使用的库是   使用无效的上下文,从而有助于整体   系统稳定性和可靠性降低。这个通知是一个   礼貌:请解决这个问题。它将成为一个致命的错误   即将到来的更新。

你能解释一下我做错了吗?

2 个答案:

答案 0 :(得分:3)

我通过创建CAShapeLayer并将其添加为视图图层的子图层来完成此操作。可以使用UIBezierPath的CGPath属性来设置图层,这很简洁。

    CAShapeLayer *layer = [CAShapeLayer layer];
    layer.path = path.CGPath;
    layer.strokeColor = [UIColor whiteColor].CGColor;
    [self.view.layer addSublayer:layer];

答案 1 :(得分:1)

错误消息完全正确。您正在使用绘图命令,但您不在绘图(图形)上下文中。因此,你的命令被丢弃(并且很糟糕)。

只有在图形上下文中时才应该提供绘图命令。主要有两种情况:

  • 您已进入UIView子类drawRect:

  • 您已使用UIGraphicsBeginImageContextWithOptions创建了图片图形上下文。

你们两种情况都没有。您可以创建一个贝塞尔路径对象,构建路径,但不能绘制该对象;因此,setStrokestroke等命令是非法的。