【问题标题】:How can i see with @designable this design on storyboard我如何使用@designable 在情节提要上看到这个设计
【发布时间】:2020-05-14 00:03:09
【问题描述】:

我正在使用遮罩。

我的代码:

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 UIView 代码在哪里?
  • @matt 更新了我的问题。

标签: swift xcode uiimageview ibdesignable


【解决方案1】:

我添加了自定义类但没有用

我向你保证,在 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
    }
}

结果:

怀疑你的代码的问题是你试图在你的IBDesignable 代码中使用UIImage(named:) 从包中加载图像;我的猜测是那行不通。 IBDesignable 代码只是在情节提要渲染时运行的一些东西;它不能表现得好像它是真正正在运行的应用程序。

【讨论】:

  • 谢谢先生 :) 但我正在使用另一个三角形 png 图像进行遮罩。我正在尝试制作一个三角形。我做不到。我该怎么办?
  • 如果我是对的,您无法在 IBDesignable 的代码中加载图像,您应该按照我在示例中所做的操作:在代码中将三角形本身绘制为 UIBezierPath。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-04
相关资源
最近更新 更多