2015-10-01 2 views
2

Так это то, что я до сих пор:MapView с круглым угловым левым верхним и RightTop углом наклонного

let indentTopToLeft: CGFloat = 50 
    let indentTopToBottom: CGFloat = 100 

    let path: CGMutablePathRef = CGPathCreateMutable() 
    CGPathMoveToPoint(path, nil, 3, 0) 
    CGPathAddLineToPoint(path, nil, 200-indentTopToLeft, 0) 
    CGPathAddLineToPoint(path, nil, 200, indentTopToBottom) 
    CGPathAddLineToPoint(path, nil, 200 , 150)//4 
    CGPathAddLineToPoint(path, nil, 0, 150) 
    CGPathAddLineToPoint(path, nil, 0, 3) 
    //The rounded goes here. But I don't know how. 
    CGPathAddLineToPoint(path, nil, 3, 0) 
    CGPathCloseSubpath(path) 

    let maskLayer = CAShapeLayer() 
    maskLayer.path = path 
    self.mapView.layer.mask = maskLayer 

enter image description here

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

CGPathAddLineToPoint(path, nil, 0, 3) 
//HERE 
CGPathAddLineToPoint(path, nil, 3, 0) 
+0

Я не совсем уверен, что вы просите. Непонятно, где вы хотите добавить дугу. Может быть, вы должны включить графику/изображение того, что вы хотите? Вы видели дополнительные функции 'CGPathAddArc',' CGPathAddRelativeArc' и 'CGPathAddArcToPoint'? Я бы использовал один из них, чтобы добавить изогнутые углы. –

+0

Я добавил некоторые графики. Думаю, мне тоже нужно использовать Arc, но я понятия не имею, как это сделать. :/ – hugocarlmartin

ответ

1

Есть много способов сделать это, но самый прямой, вероятно, использовать функцию CGPathAddArc. Обратите внимание, что это оставляет вас в точке 0,3, поэтому нет необходимости в коде, который добавляет строку к этой точке. Я ожидаю, что измененный код рисования, чтобы выглядеть следующим образом:

let indentTopToLeft: CGFloat  = 50 
let indentTopToBottom: CGFloat = 100 
let topLeftCornerRadius: CGFloat = 3 

let path: CGMutablePathRef = CGPathCreateMutable() 
CGPathMoveToPoint(path, nil, topLeftCornerRadius, 0) 
CGPathAddLineToPoint(path, nil, 200-indentTopToLeft, 0) 
CGPathAddLineToPoint(path, nil, 200, indentTopToBottom) 
CGPathAddLineToPoint(path, nil, 200 , 150)//4 
CGPathAddLineToPoint(path, nil, 0, 150) 
CGPathAddLineToPoint(path, nil, 0, topLeftCornerRadius) 
CGPathAddArc(path, nil, topLeftCornerRadius, topLeftCornerRadius, topLeftCornerRadius, CGFloat(M_PI + M_PI), CGFloat(M_PI + M_PI_2), false) 
CGPathCloseSubpath(path) 

Параметры CGPathAddArc хорошо документированы; после nil мы имеем x, а затем y положение центральной точки дуги, радиус дуги, угол начала и угол поворота (в радианах), а затем значение, указывающее, следует ли его нарисовать по часовой стрелке или против часовой стрелки. Следует отметить, что я всегда нахожу значение по часовой стрелке, а начальный и конечный углы не будут такими, какие я ожидаю - это вполне вероятно, потому что CoreGraphics имеет другое начало (внизу слева), чем UIKit (вверху слева), но я не могу это объяснить для некоторых.

+0

Спасибо, что так много. – hugocarlmartin

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