UIImageView Mask Layer не идет из углов До прокрутки PageViewController Первый раз - PullRequest
0 голосов
/ 14 декабря 2018

Я хочу добиться этого результата

enter image description here

Поэтому мне нужно добавить маску внизу, но вот что я получил

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

    }

После прокрутки В первый раз я получаю правильный результат

Я не понимаю, что яотсутствует любая помощь?

1 Ответ

0 голосов
/ 14 декабря 2018

Я решил проблему с

    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, я думал, что маскирование не работает должным образом.Тем не менее, существует проблема, связанная с тем, что первый раз в маске контроллера просмотра страниц не выполняется, но после прокрутки один раз она становится идеальной.

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



    }
}
...