2014-10-07 3 views
0

Я пытаюсь найти лучший способ реализовать закругленный прямоугольник (например, looling, как иконы iphone). Мой поиск был предложен с использованием UIBezierPath.Как исправить недопустимый контекст 0x0 с UIBezierPath?

Для того, чтобы проверить, что класс, который я сделал новый шаблон Xcode (одного приложения просмотра) и в основном только добавлены следующие строки в viewDidLoad ViewController в:

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 ошибка...". Я предполагаю, что мне нужно сначала установить контекст? Но как мне это сделать или если не исправлять эти ошибки в противном случае?

Мой поиск по этой ошибке придумал несколько сообщений. К сожалению, у всех из них, похоже, была сложная кодировка. Я уверен, однако, что здесь у меня просто основное недоразумение.

Спасибо!

+0

Я предлагаю читать [Quartz 2D Programming Guide] (https://developer.apple.com/library/ios/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/Introduction/Introduction.html#//apple_ref/doc/uid/ TP30001066). – Desdenova

+0

@Desdenova Спасибо! Это хорошо выглядит - я проверю это. – McMini

ответ

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

Это очень вводит в заблуждение. Вам не нужно замаскировать слой для рисования 'CAShapeLayer' с закругленными углами. – Desdenova

+0

Благодарим за быстрый ответ! Очевидно, проблема сложнее, чем я надеялся - я попытаюсь понять ваш код и отчитаться ... – McMini

+0

@ Desdenova, тогда как мы можем сделать вид, как Rounded corner? –

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]; 
} 
Смежные вопросы