我想要达到这个结果

所以我需要在底部加上面具,但是这里我得到了

我试过的代码
private func setupImageCutPath () {
let path = UIBezierPath()
path.move(to: .zero)
path.addLine(to: CGPoint(x: 0 , y: self.imgView.frame.height))
path.addLine(to: CGPoint(x: self.imgView.frame.width , y: self.imgView.frame.height - imageCutAwayPart))
path.addLine(to: CGPoint(x: self.imgView.frame.width, y: 0))
// Multiple tried to check from where masking is comming
self.maskLayer.fillColor = UIColor.gray.cgColor
self.maskLayer.lineWidth = 1.0
self.maskLayer.borderColor = UIColor.gray.cgColor
self.maskLayer.borderWidth = 1.0
self.maskLayer.path = path.cgPath
self.imgView.layer.mask = self.maskLayer
}第一次滚动后我得到了正确的结果。
我不明白我缺少什么帮助?
发布于 2018-12-14 11:53:09
我解决了问题
path.move(to: .zero)
/* THIS HELPLS ME */ path.addLine(to: CGPoint(x: 0 , y: self.imgView.frame.height - imageCutAwayPart / 2 ))
path.addLine(to: CGPoint(x: self.imgView.frame.width , y: self.imgView.frame.height - imageCutAwayPart))
path.addLine(to: CGPoint(x: self.imgView.frame.width, y: 0))但我不明白为什么我要移动CGPoint(x: 0 , y: self.imgView.frame.height - imageCutAwayPart / 2 )而不是CGPoint(x: 0 , y: self.imgView.frame.height)
如果有人知道这个问题,请贴上作为答案,我一定会接受的。

编辑
童话里有个愚蠢但聪明的错误。
错误是存在UIView,其中包含屏幕截图中显示的标签。可见的部分是UIView,我认为它的掩蔽不能正常工作。还有一个问题,就是第一次在页面查看控制器掩码是不合适的,但滚动后一次它是完美的。
EDIT2 @DonMag
以下是每个案例的有效解决方案
class CutOfImageView:UIImageView {
let imageCutAwayPart:CGFloat = 80
let maskLayer = CAShapeLayer()
override func layoutSubviews() {
super.layoutSubviews()
self.setupImageCutPath()
self.layer.mask = self.maskLayer
}
private func setupImageCutPath () {
let path = UIBezierPath()
path.move(to: .zero)
path.addLine(to: CGPoint(x: 0 , y: self.frame.height ))
path.addLine(to: CGPoint(x: self.frame.width , y: self.frame.height - imageCutAwayPart))
path.addLine(to: CGPoint(x: self.frame.width, y: 0))
path.close()
self.maskLayer.path = path.cgPath
}
}https://stackoverflow.com/questions/53779142
复制相似问题