首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIImageView蒙版层直到第一次滚动PageViewController时才会从角处来

UIImageView蒙版层直到第一次滚动PageViewController时才会从角处来
EN

Stack Overflow用户
提问于 2018-12-14 11:45:25
回答 1查看 164关注 0票数 2

我想要达到这个结果

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

我试过的代码

代码语言:javascript
复制
 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

    }

第一次滚动后我得到了正确的结果。

我不明白我缺少什么帮助?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-14 11:53:09

我解决了问题

代码语言:javascript
复制
    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

以下是每个案例的有效解决方案

代码语言:javascript
复制
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



    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53779142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档