ios - UIImageView mask 层不来自角落直到滚动 PageViewController 第一次

标签 ios swift uiimageview layer

我要达到这个结果

enter image description here

所以我需要在底部添加 mask ,但这是我得到的

enter image description here

我试过的代码

 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

    }

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

我不明白我错过了什么任何帮助?

最佳答案

我用

解决了问题
    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)

如果有人知道这个请发帖回答我一定会采纳

enter image description here

编辑

Storybaord 中有一个愚蠢但聪明的错误

错误是 UIView 包含屏幕截图中显示的标签。可见的部分是 UIView,我认为它的 mask 无法正常工作。仍然存在第一次在页面 View Controller 掩码中不正确但滚动一次后它是完美的问题。

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



    }
}

关于ios - UIImageView mask 层不来自角落直到滚动 PageViewController 第一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53779142/

相关文章:

objective-c - 使用异步显示工具包缩放文本 ASTextNode

ios - 为什么 swift 无法识别我的资源?

swift - 如何快速将 UIImageView 添加到导航栏?

ios - 导航栏和主屏幕上的 UIImageView

swift - 由于未捕获的异常 'NSInternalInconsistencyException' 而终止应用程序,原因 : 'Failed to set posix_spawn_file_actions for fd -1 at index 0

ios - 处理存储在数组中的大图像时内存使用率高或质量好权衡

ios - 如何防止我的节标题与组合布局中的单元格重叠

ios - UIAppearance setTranslucent error : Illegal property type, c for appearance setter, _installAppearanceSwizzleForSetter

ios - ViewController 上的框架

ios - AudioKit 请求访问麦克风