2013-09-02 2 views
2

Im пытается сделать UILabel с краями, похожими на следующее изображение.Как установить UILabel не прямоугольную рамку

enter image description here

Вот drawRect: из моего UILabel подкласса.

-(void)drawRect:(CGRect)rect{ 

     [super drawRect:rect]; 
     CGContextRef context = UIGraphicsGetCurrentContext(); 
     CGContextSaveGState(context); 
     CGRect labelRect = self.bounds; 

     CGPoint bottomPoint = CGPointMake(labelRect.size.width, rect.size.height); 
     CGPoint topMinus30Point =CGPointMake(labelRect.size.width-30, 0); 
     CGPoint topPoint = CGPointMake(labelRect.size.width, 0); 

     CGContextBeginPath (context); 
     //from bottom to -30 top 
     CGContextMoveToPoint(context, bottomPoint.x,bottomPoint.y); 
     CGContextAddLineToPoint(context, topMinus30Point.x,topMinus30Point.y); 

     //from -30 to top 
     CGContextMoveToPoint(context, topMinus30Point.x,topMinus30Point.y); 
     CGContextAddLineToPoint(context, topPoint.x,topPoint.y); 

     //from top to bottom 
     CGContextMoveToPoint(context, topPoint.x,topPoint.y); 
     CGContextAddLineToPoint(context, bottomPoint.x,bottomPoint.y); 
     CGContextClosePath(context); 

     CGContextStrokePath(context); 
     CGContextRestoreGState(context); 

} 

Как обрезать созданный путь из текущего кадра?
[Я только начинаю с Core Graphics, поэтому, пожалуйста, будьте нежны :)]

Любые указатели на то, как достичь этого, будут действительно полезны.
Благодаря

+2

глупой вещь, которую вы ищет .... вы можете сделать это таким образом, чтобы установить фоновое изображение с этим прямоугольником, расположенным справа, и над этим представлением изображения добавьте UILable с нужным текстом ... нет способа t o достичь того, что вы просите –

+0

Я всегда могу сделать это с помощью изображений, но это часть моего основного исследования графики. – r3dsm0k3

+0

удачи :) –

ответ

2

Попробуйте это:

- (void)drawRect:(CGRect)rect 
{ 

    CGContextRef context = UIGraphicsGetCurrentContext(); 

    // clear drawing rect 
    CGContextClearRect(context, rect); 

    // save 1 
    CGContextSaveGState(context); 

    CGRect labelRect = self.bounds; 
    CGPoint bottomPoint = CGPointMake(labelRect.size.width, rect.size.height); 
    CGPoint topMinus30Point = CGPointMake(labelRect.size.width-30, 0); 
    CGPoint topPoint = CGPointMake(labelRect.size.width, 0); 

    CGContextBeginPath(context); 

    CGContextMoveToPoint(context, 0.0f, 0.0f); 
    CGContextAddLineToPoint(context, topMinus30Point.x, topMinus30Point.y); 
    CGContextAddLineToPoint(context, bottomPoint.x, bottomPoint.y); 
    CGContextAddLineToPoint(context, 0.0f, bottomPoint.y); 
    CGContextAddLineToPoint(context, 0.0f, 0.0f); 

    CGContextClosePath(context); 

    CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor); 
    CGContextDrawPath(context, kCGPathFill); 

    // restore 1 
    CGContextRestoreGState(context); 

} 

Поместите это в инициализации используется:

[self setBackgroundColor:[UIColor clearColor]]; 
+0

Спасибо, joao, именно то, что я хотел. – r3dsm0k3

+0

тоже, [super drawRect: rect]; – r3dsm0k3

+0

действительно вам нужно, чтобы нарисовать текст :) Рад, что это помогло – joao

0

Один подход,

установить цвет фона этикетки, чтобы очистить цвет, и нарисуйте требуемую форму внутри метода drawRect, используя CGContext.

Ваш DrawRect станет как этого

- (void)drawRect:(CGRect)rect{ 

[super drawRect:rect]; 
CGContextRef context = UIGraphicsGetCurrentContext(); 
CGRect labelRect = self.bounds; 


CGPoint bottomPoint = CGPointMake(labelRect.size.width, rect.size.height); 
CGPoint topMinus30Point =CGPointMake(labelRect.size.width-30, 0); 

//from bottom to -30 top 

CGContextMoveToPoint(context, self.bounds.origin.x,self.bounds.origin.y); 
CGContextAddLineToPoint(context, topMinus30Point.x,topMinus30Point.y); 
CGContextAddLineToPoint(context, bottomPoint.x,bottomPoint.y); 
CGContextAddLineToPoint(context, self.bounds.origin.x,self.bounds.origin.x + self.bounds.size.height); 
CGContextAddLineToPoint(context, self.bounds.origin.x,self.bounds.origin.y); 


CGContextSetFillColorWithColor(context, [UIColor greenColor].CGColor); 
CGContextFillPath(context); 

} 

Другого подходом с использованием CGContextClip, используя этот подход, ваш DrawRect станет как этого

CGContextMoveToPoint(context, self.bounds.origin.x,self.bounds.origin.y); 
CGContextAddLineToPoint(context, topMinus30Point.x,topMinus30Point.y); 
CGContextAddLineToPoint(context, bottomPoint.x,bottomPoint.y); 
CGContextAddLineToPoint(context, self.bounds.origin.x,self.bounds.origin.x + self.bounds.size.height); 
CGContextAddLineToPoint(context, self.bounds.origin.x,self.bounds.origin.y); 
CGContextClip(context); 

CGContextSetFillColorWithColor(context, [UIColor greenColor].CGColor); 
CGContextFillRect(context, self.bounds); 

Надеется, что это помогает

Смежные вопросы