McMini
McMini

Reputation: 305

How to fix invalid context 0x0 with UIBezierPath?

I am trying to find the best way to implement an rounded rectangle (e.g. looling like the iphone icons). My search suggested using UIBezierPath.

In order to test that class I made a new xcode template (single view application) and basically just added the following lines in ViewController's 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];

Now I get several "...invalid context 0x0 error...". I assume that I have to set a context first?! But how do I do this or if not fix those errors otherwise?

My search on that error came up with a few posts. Unfortunaltely all of them seemed to have rather complex coding associated. I'm pretty sure however that I have just a very basic misunderstanding here.

Thank you!

Upvotes: 0

Views: 364

Answers (2)

johny kumar
johny kumar

Reputation: 1270

you can use this and assign that in layer of your view

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];

Upvotes: 2

McMini
McMini

Reputation: 305

in case it is helpful for someone else: on basis of the code provided by johnykumar and another post on a similar topic:

- (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];
}

Upvotes: 0

Related Questions