Как я могу увидеть @designable этот дизайн на раскадровке - PullRequest
0 голосов
/ 28 января 2020

Я использую маскирование.

Мой код:

class ViewController: UIViewController {

    @IBOutlet weak var firstImageView: UIImageView!
    @IBOutlet weak var seconImageView: UIImageView!


    let maskView = UIImageView()
    let maskView2 = UIImageView()

    override func viewDidLoad() {
        super.viewDidLoad()

        maskView.image = UIImage(named: "Up")
        maskView2.image = UIImage(named: "Down")
        firstImageView.mask = maskView
        seconImageView.mask = maskView2
    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        maskView.frame = firstImageView.bounds
        maskView2.frame = seconImageView.bounds
    }
}

Код UIImageView:

Класс UIImageView , Я не вижу этот дизайн. Как я могу сделать ? Я добавил пользовательский класс, но он не работал

@IBDesignable
class FirstImageView: UIImageView {

    var maskkView: UIImageView!

    override init(frame: CGRect) {
        super.init(frame: frame)
        layoutSubviews()
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
        layoutSubviews()
    }

    override func layoutSubviews() {
        super.layoutSubviews()

        maskkView.image = UIImage(named: "mask")
        mask = maskkView
        maskkView.frame = bounds
    }

}

Раскадровка:

enter image description here

Симулятор:

enter image description here

Как я могу увидеть @designable этот дизайн на раскадровке.

1 Ответ

0 голосов
/ 28 января 2020

Я добавил пользовательский класс, но он не работал

Уверяю вас, маскировка в layoutSubviews IBDesignable UIImageView работает. Пример:

@IBDesignable
class MyImageView : UIImageView {
    override func layoutSubviews() {
        super.layoutSubviews()
        let lay = CAShapeLayer()
        lay.frame = self.bounds
        lay.path = UIBezierPath(ovalIn: self.bounds).cgPath
        self.layer.mask = lay
    }
}

Результат:

enter image description here

I подозреваю , что проблема с вашим кодом заключается в том, что вы пытаетесь загрузить изображение из комплекта с UIImage(named:) в вашем коде IBDesignable; я думаю, что это не сработает. IBDesignable код - это просто кое-что, что выполняется во время рендеринга раскадровки; он не может вести себя так, как будто это действительно запущенное приложение.

...