2016-05-02 3 views
0

Как я могу покрасить внутри пути UIBezier? Я делаю простой треугольник и хочу покрасить внутри треугольника красным цветом.Подача UIBezierPath в Swift

class GraphView : UIView { 

    override func drawRect(rect: CGRect) { 

     UIColor.redColor().setFill() 
     UIColor.greenColor().setStroke() 

     let path = UIBezierPath(rect: rect) 
     path.moveToPoint(CGPointMake(100,620)) 
     path.addLineToPoint(CGPointMake(300,100)) 
     path.addLineToPoint(CGPointMake(500,620)) 
     path.addLineToPoint(CGPointMake(100,620)) 

     path.closePath() 

     path.fill() 
     path.stroke() 

    } 

} 


let graphView = GraphView(frame: CGRectMake(0,0,960,640)) 
XCPlaygroundPage.currentPage.liveView = graphView 

Приведенный выше код написан на детской площадке: Вот результат:

enter image description here

+0

Opps извините! Обновлен вопрос с кодом и новым скриншотом. –

ответ

1

Проблема заключается с тем, как вы создаете свой UIBezierPath. Вы создаете его с прямоугольником границ представления, а затем добавляете треугольник внутри этого прямоугольника. Поэтому они оба заполняются, что приводит к красному представлению.

Если вы установите usesEvenOddFillRule в true, вы будете лучше видеть результат нежелательного прямоугольника в вашем пути:

enter image description here

Если вы просто хотите, чтобы заполнить треугольник затем заменить эту строку:

let path = UIBezierPath(rect: rect) 

с этим:

let path = UIBezierPath() 

Это создаст новый пустойUIBezierPath, к которому вы можете добавить свой треугольник.

+0

Спасибо! Одна вещь, которая меня беспокоит, заключается в том, что даже если я опускаю последнюю строку: path.addLineToPoint (CGPointMake (100,620)), она все равно создает треугольник. Не требует ли эта последняя строка завершить треугольник. –

+1

@johndoe 'path.closePath()' создаст треугольник, соединяя последнюю точку пути с первой точкой пути (с прямой линией), поэтому последняя строка действительно избыточна. Также обратите внимание, что 'path.fill()' будет [неявно закрывать путь] (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIBezierPath_class/#//apple_ref/occ/instm/UIBezierPath/заполнения). – Hamish

Смежные вопросы