Рисование фигур с использованием UIBezierPath в Swift

Я не знаю, как рисовать форму с помощью UIBezierPath. В любом случае, я пробовал много способов, но безуспешно.

Я хочу сделать следующие фигурывведите здесь описание изображения

Пожалуйста помоги


person Lydia    schedule 19.10.2015    source источник


Ответы (1)


func drawSliceInView(view: UIView, startAngle: CGFloat, endAngle: CGFloat, radius: CGFloat)
{
    let centerPoint = CGPoint(x: view.frame.size.width / 2, y: view.frame.size.width / 2)
    let startValue = (startAngle * 2 * CGFloat(M_PI)) / 360 - CGFloat(M_PI_2)
    let endValue = (endAngle * 2 * CGFloat(M_PI)) / 360 - CGFloat(M_PI_2)

    let path = UIBezierPath(arcCenter: centerPoint, radius: radius, startAngle: startValue, endAngle: endValue, clockwise: true)
    path.addLineToPoint(centerPoint)
    path.closePath()

    let sliceLayer = CAShapeLayer()
    sliceLayer.path = path.CGPath
    sliceLayer.fillColor = UIColor.blueColor().CGColor
    sliceLayer.backgroundColor = nil
    sliceLayer.strokeColor = UIColor.whiteColor().CGColor
    sliceLayer.lineWidth = 2.0

    view.layer.addSublayer(sliceLayer)
}

Пример использования:

drawSliceInView(self.view, startAngle: -30, endAngle: 90, radius: 50)
drawSliceInView(self.view, startAngle: 90, endAngle: 210, radius: 50)

person ifau    schedule 19.10.2015
comment
Действительно спасибо. Как увеличить размер фигур. Потому что вместо просмотра я хочу изменить изображение на эту форму. - person Lydia; 19.10.2015
comment
@ Лидия, измени значение радиуса. - person ifau; 19.10.2015
comment
Пожалуйста, смотрите отредактированный вопрос. Пожалуйста, дайте мне знать, как это нарисовать. - person Lydia; 19.10.2015
comment
@ Лидия, просто рассчитай начальный и конечный угол. На 3-м изображении это 210 и 330 градусов. - person ifau; 19.10.2015
comment
хорошо. Могу ли я добавить изображение в ваш код. Например, sliceLayer.contents = image это возможно - person Lydia; 19.10.2015
comment
@Lydia, ваш первоначальный вопрос был о том, как рисовать фигуры с помощью UIBezierPath. Сейчас вы спрашиваете совсем другое, поэтому, пожалуйста, задайте новый вопрос. - person ifau; 19.10.2015
comment
Да.Конечно.Большое спасибо - person Lydia; 19.10.2015