如何使用UIBezierPath修复无效的上下文0x0?

时间:2014-10-07 11:23:02

标签: ios objective-c iphone xcode uibezierpath

我正在尝试找到实现圆角矩形的最佳方法(例如像iPhone图标一样松动)。我的搜索建议使用UIBezierPath。

为了测试该类,我创建了一个新的xcode模板(单视图应用程序),并且基本上只是在ViewController的viewDidLoad中添加了以下行:

UIBezierPath* path = [UIBezierPath
                      bezierPathWithRoundedRect: CGRectMake(10, 10, 120, 120)
                      cornerRadius: 5];
[[UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1.0] setFill];
[path stroke];
[path fill];

现在我得到了几个“......无效的上下文0x0错误......”。我假设我必须先设置一个上下文?!但是,我该怎么做或者如果不修复那些错误呢?

我对这个错误的搜索提出了一些帖子。不幸的是,所有这些似乎都有相当复杂的编码。我很确定我在这里只有一个非常基本的误解。

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用此功能并在视图的图层中指定

UIBezierPath *maskpath=[UIBezierPath bezierPathWithRoundedRect:view1.bounds
    byRoundingCorners:UIRectCornerBottomLeft|UIRectCornerBottomRight
     cornerRadii:CGSizeMake(10.0,10.0)];

   CAShapeLayer *maskLayer=[CAShapeLayer layer];

   maskLayer.frame=view1.bounds;

   maskLayer.path=maskpath.CGPath;

   [view1.layer addSublayer:maskLayer];

答案 1 :(得分:0)

如果它对其他人有帮助:基于johnykumar提供的代码和另一篇关于类似主题的帖子:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor blackColor];
    CGRect frame = CGRectMake(50.0, 50.0, 150.0, 150.0);
    CGFloat radius = 20.0;
    UIView *frontView = [[UIView alloc] initWithFrame:frame];
    frontView.backgroundColor = [UIColor redColor];
    CAShapeLayer * maskLayer = [CAShapeLayer layer];
    maskLayer.path = [UIBezierPath bezierPathWithRoundedRect:frontView.bounds
                                           byRoundingCorners:UIRectCornerAllCorners
                                                 cornerRadii:CGSizeMake(radius,     radius)].CGPath;
    frontView.layer.mask = maskLayer;
    [self.view addSubview:frontView];
}