我从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);
,它打印出这个不祥的错误信息。
这是一个严重的错误。此应用程序或它使用的库是 使用无效的上下文,从而有助于整体 系统稳定性和可靠性降低。这个通知是一个 礼貌:请解决这个问题。它将成为一个致命的错误 即将到来的更新。
你能解释一下我做错了吗?
答案 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
创建了图片图形上下文。
你们两种情况都没有。您可以创建一个贝塞尔路径对象,构建路径,但不能绘制该对象;因此,setStroke
和stroke
等命令是非法的。