2015-03-16 3 views
0

Как нарисовать форму, показанную ниже, используя UIBezierPath или CG? Я могу думать о нескольких путях, но никто не очень хорош. Он содержит небольшую стрелку/треугольник и круг. Также мне нужно иметь возможность вращать эту фигуру, поэтому угол стрелки не может быть жестко закодирован. Вы можете игнорировать светлый серый круг. Только красная форма (плюс UILabel лучше)iOS: Как нарисовать специальную форму

Example image showing the desired shape

+0

http://ronnqvi.st/thinking-like-a-bzier-path/ – iphonic

+0

@Wingzero сделал мой ответ, на ваш вопрос? –

ответ

0

Первый подкласс UIView и переопределить drawRect:. Этот код очень близко и должен получить вас там с некоторой настройки:

//Get the graphics context 
let context = UIGraphicsGetCurrentContext() 

//Colors, I was a little off here 
let color = UIColor(red: 0.880, green: 0.653, blue: 0.653, alpha: 1.000) 

//The circle 
var ovalPath = UIBezierPath(ovalInRect: CGRectMake(86, 31, 58, 56)) 
color.setFill() 
ovalPath.fill() 


//The pointed arrow on the left of the circle 
var bezierPath = UIBezierPath() 
bezierPath.moveToPoint(CGPointMake(87, 54)) 
bezierPath.addLineToPoint(CGPointMake(76, 60)) 
bezierPath.addLineToPoint(CGPointMake(87, 66)) 
bezierPath.addLineToPoint(CGPointMake(87, 54)) 
color.setFill() 
bezierPath.fill() 


//Now, draw the 17% 
let textRect = CGRectMake(95, 45, 40, 29) 
var textTextContent = NSString(string: "17%") 
let textStyle = NSMutableParagraphStyle.defaultParagraphStyle().mutableCopy() as NSMutableParagraphStyle 
textStyle.alignment = NSTextAlignment.Center 

//Text components 
let textFontAttributes = [NSFontAttributeName: UIFont.systemFontOfSize(19), NSForegroundColorAttributeName: UIColor.whiteColor(), NSParagraphStyleAttributeName: textStyle] 

let textTextHeight: CGFloat = textTextContent.boundingRectWithSize(CGSizeMake(textRect.width, CGFloat.infinity), options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: textFontAttributes, context: nil).size.height 
CGContextSaveGState(context) 
CGContextClipToRect(context, textRect); 
textTextContent.drawInRect(CGRectMake(textRect.minX, textRect.minY + (textRect.height - textTextHeight)/2, textRect.width, textTextHeight), withAttributes: textFontAttributes) 
CGContextRestoreGState(context) 

Все, что дает вам:

+0

Я буду смотреть завтра, заблаговременно поблагодарить – Wingzero

+0

Если это соответствует вашим потребностям, отметьте его как ответ –

+0

В итоге я написал свой собственный просмотр и делегат dataSource для его рисования. Хотя я не могу опубликовать весь свой код, но он похож на ваше решение. – Wingzero