Как добавить несколько путей Безье в один и тот же вид Swift 3

Я добавил треугольник таким образом

// draw the line graph

    UIColor.white.setFill()
    UIColor.white.setStroke()

    ///--------SETUP FIRST TRIANGLE-----------------------------------------------
    //set up the points line
    let graphPath = UIBezierPath()
    //go to start of line
    graphPath.move(to: CGPoint.init(x: rect.minX, y: rect.minY))
    graphPath.addLine(to: CGPoint.init(x: (rect.maxX/2.0), y: (rect.maxY/2.0)))
    graphPath.addLine(to: CGPoint.init(x: rect.minX, y: rect.maxY))
    graphPath.stroke()
    //2 - make a copy of the path
    let clippingPath = graphPath.copy() as! UIBezierPath

    //3 - add lines to the copied path to complete the clip area
    clippingPath.addLine(to: CGPoint.init(x: rect.minX, y: rect.minY))
    clippingPath.close()

    //4 - add the clipping path to the context
    clippingPath.addClip()

    let startPoint = CGPoint(x:(rect.maxX/2.0), y: (rect.maxY/2.0))
    let endPoint = CGPoint(x:rect.minX, y:(rect.maxY/2.0))
    let gradient=self.getGradient(tiangleNo: 1)
    let context = UIGraphicsGetCurrentContext()
    context!.drawLinearGradient(gradient, start: startPoint, end: endPoint, options: CGGradientDrawingOptions(rawValue: 0))

Это рисунок треугольника, который я хотел. Теперь я хочу нарисовать еще один треугольник. Так что я сделал, как это.

///------------SECOND TRIANGLE -----------------------------------------------


    let graphPath2 = UIBezierPath()

    graphPath2.move(to: CGPoint.init(x: rect.minX, y: rect.minY))
    graphPath2.addLine(to: CGPoint.init(x: rect.maxX, y: rect.minY))
    graphPath2.addLine(to: CGPoint.init(x: (rect.maxX/2.0), y: (rect.minY/2.0)))
    graphPath2.stroke()

    let oldPath1=clippingPath.copy() as! UIBezierPath
    oldPath1.append(graphPath2)

    let startPoint2 = CGPoint(x:(rect.maxX/2.0), y: (rect.maxY/2.0))
    let endPoint2 = CGPoint(x:(rect.maxX/2.0), y:rect.minY)
    let gradient2=self.getGradient(tiangleNo: 2)
    let context2 = UIGraphicsGetCurrentContext()
    context2!.drawLinearGradient(gradient2, start: startPoint2, end: endPoint2, options: CGGradientDrawingOptions(rawValue: 0))

Но это просто добавление треугольника внутрь предыдущего.rectэто мой прямоугольник UIScreen


person Randi    schedule 02.06.2017    source источник
comment
надеюсь, это поможет: stackoverflow.com/questions/21776253/   -  person Tejas Ardeshna    schedule 02.06.2017


Ответы (1)


Простое решение

Вы можете написать такую ​​​​функцию

func drawTriangle(point1:CGPoint, point2:CGPoint, point3:CGPoint) {

    let path = UIBezierPath()
    path.move(to: point1)
    path.addLine(to: point2)
    path.addLine(to: point3)
    path.close()

    path.lineWidth = 2.0
    UIColor.red.setFill()
    path.fill()

}

Нарисуйте треугольники, вызвав функцию

//Triagle 1

let pointA = CGPoint(x: 0, y: 0)
let pointB = CGPoint(x: 100, y: 0)
let pointC = CGPoint(x: 0, y: 100)

drawTriangle(point1: pointA, point2: pointB, point3: pointC)

//Triagle 2

let pointD = CGPoint(x: 120, y: 0)
let pointE = CGPoint(x: 220, y: 0)
let pointF = CGPoint(x: 220, y: 100)

drawTriangle(point1: pointD, point2: pointE, point3: pointF)

Вы получите что-то вроде этого,

введите здесь описание изображения

person Thilina Hewagama    schedule 02.06.2017
comment
Спасибо, но как добавить цвет градиента для этого пути? Я устанавливаю let context = UIGraphicsGetCurrentContext() context!.drawLinearGradient(gradient, start: startPoint, end: endPoint, options: CGGradientDrawingOptions(rawValue: 0)) тогда он делает всю область в этом цвете - person Randi; 02.06.2017