我创建了一个实现自定义绘图的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
这是调用堆栈后的样子:
知道可能导致这种情况的原因吗?
答案 0 :(得分:1)
尝试在视图控制器setNeedsDisplay()
viewWillAppear()