查看drawRect仅在延迟后调用

时间:2016-11-23 12:26:39

标签: ios uiview uikit

我创建了一个实现自定义绘图的UIView子类。这是代码(请不要介意这可以通过UIImageView完成。我删除所有附加内容的代码只是为了显示问题)

@IBDesignable
class TPMSkinnedImageView: UIView {
    private var originalImage:UIImage?
    private var skinnedImage:UIImage?

    @IBInspectable var image: UIImage? {
        set {
            originalImage = newValue

            if(newValue == nil) {
                skinnedImage = nil
                return
            }

            skinnedImage = originalImage!

            self.invalidateIntrinsicContentSize()
            self.setNeedsDisplay()
        }

        get {
            return originalImage
        }
    }

    override func draw(_ rect: CGRect) {
        let context:CGContext! = UIGraphicsGetCurrentContext()
        context.saveGState()
        context.translateBy(x: 0, y: rect.height)
        context.scaleBy(x: 1, y: -1)
        context.draw(skinnedImage!.cgImage!, in: rect)
        context.restoreGState()
    }

    override var intrinsicContentSize: CGSize {
        if(skinnedImage != nil) {
            return skinnedImage!.size
        }

        return CGSize.zero
    }
}

我在viewcontroller nib文件中实例化这个视图,并以模态方式显示viewcontroller。

当父视图在屏幕上显示约20秒时,只会调用draw方法。

我检查了intrinsicContentSize,但未返回.zero

这是调用堆栈后的样子:

enter image description here

知道可能导致这种情况的原因吗?

1 个答案:

答案 0 :(得分:1)

尝试在视图控制器setNeedsDisplay()

中的视图上调用viewWillAppear()