Вот @ реализация моего LinethruLabel, подкласса UILabel. Это указывает на «поцарапанный» элемент с красной линией, нанесенной через текст. В моем случае я звоню [super drawRect:rect];
, а UILabel рисует текст, фон и т. Д., Но я не уверен, хотите ли вы этого, так что уберите его, если он работает не так, как вы хотите. Поэтому я думаю, вам нужно будет использовать некоторые варианты drawAtPoint:withFont:
методов из категории NSString UIKit.
@implementation LineThruUILabel
- (void)dealloc {
[super dealloc];
}
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
// Initialization code
drawLine = NO;
}
return self;
}
- (void) setDrawLine:(BOOL) newValue
{
if( drawLine != newValue ){
drawLine = newValue;
[self setNeedsDisplay];
}
}
- (CGSize) calculateLineWidth
{
NSString *newText = self.text;
CGFloat actualFontSize;
CGFloat width = self.frame.size.width;
CGSize size = [newText sizeWithFont: self.font minFontSize:self.minimumFontSize
actualFontSize:&actualFontSize
forWidth:width
lineBreakMode:self.lineBreakMode ];
return size;
}
- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
CGFloat horizOffset = 0.0;
if( drawLine ){
CGSize lineSize = [self calculateLineWidth];
CGFloat offset = 1.0;
// Drawing code
CGContextRef ctx = UIGraphicsGetCurrentContext();
//CGFloat w = rect.size.width;
CGFloat h = rect.size.height;
// just match the color and size of the horizontal line
CGContextSetRGBStrokeColor(ctx, 1.0, 0.0, 0.0, 1.0);
CGContextSetLineWidth(ctx, 2.0);
CGContextMoveToPoint(ctx, horizOffset , h/2 + offset );
CGContextAddLineToPoint(ctx, lineSize.width + horizOffset + 1.0, h/2 + offset);
CGContextStrokePath(ctx);
}
}