Swift 如何在故事板上使用@designable查看此设计

Swift 如何在故事板上使用@designable查看此设计,swift,xcode,uiimageview,ibdesignable,Swift,Xcode,Uiimageview,Ibdesignable,我在用掩蔽 我的代码: class ViewController: UIViewController { @IBOutlet weak var firstImageView: UIImageView! @IBOutlet weak var seconImageView: UIImageView! let maskView = UIImageView() let maskView2 = UIImageView() override func view

我在用掩蔽

我的代码:

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
    }

}
情节提要:

模拟器:

如何在故事板上使用@designable查看此设计

我添加了自定义类,但不起作用

@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
    }

}
我向您保证,
IBDesignable
UIImageView的
layoutSubviews
中的掩蔽确实有效。例如:

@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
    }
}
结果:


我怀疑您的代码有问题,因为您正试图在
IBDesignable
代码中加载带有
UIImage(名称:)
的捆绑包中的图像;我猜那是行不通的<代码>IBDesignable代码只是在故事板渲染时运行的一些东西;它不能表现得像是真正的运行应用程序。

你的
@IBDesignable
UIView代码在哪里?@matt更新了我的问题。谢谢,先生:)但我正在使用另一个三角形png图像进行掩蔽。我在试着做一个三角形。我做不到。我该怎么做?如果我是对的,您不能在IBDesignable的代码中加载图像,那么您应该像我在示例中所做的那样:在代码中将三角形本身绘制为UIBezierPath。