Как нарисовать форму, показанную ниже, используя UIBezierPath или CG? Я могу думать о нескольких путях, но никто не очень хорош. Он содержит небольшую стрелку/треугольник и круг. Также мне нужно иметь возможность вращать эту фигуру, поэтому угол стрелки не может быть жестко закодирован. Вы можете игнорировать светлый серый круг. Только красная форма (плюс UILabel лучше)iOS: Как нарисовать специальную форму
ответ
Первый подкласс 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)
Все, что дает вам:
Я буду смотреть завтра, заблаговременно поблагодарить – Wingzero
Если это соответствует вашим потребностям, отметьте его как ответ –
В итоге я написал свой собственный просмотр и делегат dataSource для его рисования. Хотя я не могу опубликовать весь свой код, но он похож на ваше решение. – Wingzero
http://ronnqvi.st/thinking-like-a-bzier-path/ – iphonic
@Wingzero сделал мой ответ, на ваш вопрос? –