Как убрать границу дуги в затененном UIView с округленной / дугой пути? - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть билет. Посмотреть как это

TicketView.

Мой метод - у меня есть 2 вида, 1 - это сам билет, а другой - для тени,Я должен сделать это, потому что если я замаскирую представление, оно будет обрезано, и тень не будет отображаться в представлении заявки.

вот код для создания представления заявки:

let shapeLayer = CAShapeLayer()
shapeLayer.frame = someView.bounds
shapeLayer.path = UIBezierPath(roundedRect: someView.bounds,
                               byRoundingCorners: [UIRectCorner.bottomLeft,UIRectCorner.bottomRight] ,
                               cornerRadii: CGSize(width: 5.0, height: 5.0)).cgPath


let rect = CGRect(x:0, y:0, width:200, height:100)
let cornerRadius:CGFloat = 5
let subPathSideSize:CGFloat = 25

let path = UIBezierPath(roundedRect: rect, cornerRadius: cornerRadius)
let leftSubPath = UIBezierPath(arcCenter: CGPoint(x: rect.width / 2, y: 0),
                               radius: subPathSideSize / 2, startAngle: .pi, endAngle: .pi * 0, clockwise: false)
leftSubPath.close()

let rightSubPath = UIBezierPath(arcCenter: CGPoint(x: rect.width / 2, y: rect.height),
                                radius: subPathSideSize / 2, startAngle: .pi, endAngle: .pi * 0, clockwise: true)
rightSubPath.close()

path.append(leftSubPath)
path.append(rightSubPath.reversing())

let mask = CAShapeLayer()
mask.frame = shapeLayer.bounds
mask.path = path.cgPath
someView.layer.mask = mask

Примечания: SomeView - это TicketView.

А вот код для добавления тени:

let shadowMask = CAShapeLayer()
shadowMask.frame = shadowView.bounds
shadowMask.path = path.cgPath
shadowMask.shadowOpacity = 0.2
shadowMask.shadowRadius = 4
shadowMask.masksToBounds = false
shadowMask.shadowOffset = CGSize(width: 0, height: 2)

shadowView.backgroundColor = UIColor.clear
shadowView.layer.addSublayer(shadowMask)

Тень делает дугу / закругленный уголграница, как эта (отмечена красным кружком).

view with border on corner

Вот моя Суть игровой площадки

DoВы знаете, как убрать границу в закругленном углу и пути дуги?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

вам нужно добавить clipToBounds в этот блок, который вы написали.

let mask = CAShapeLayer()
mask.frame = shapeLayer.bounds
mask.path = path.cgPath
someView.clipsToBounds = true
someView.layer.mask = mask
0 голосов
/ 24 сентября 2018

Так что я думаю, что есть разные расчеты для угла в маске и пути.Поэтому я использовал fillColor из shadowLayer, чтобы соответствовать цвету CouponView.И теперь границы исчезли.

shadowLayer.fillColor = someView.backgroundColor.cgColor

...