【发布时间】:2016-11-23 12:26:38
【问题描述】:
我创建了一个实现自定义绘图的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
}
}
我在视图控制器 nib 文件中实例化此视图并以模态方式显示视图控制器。
发生的情况是 draw 方法仅在父视图在屏幕上显示大约 20 秒时才被调用。
我检查了intrinsicContentSize,它没有返回.zero
这就是堆栈调用后的样子:
知道是什么原因造成的吗?
【问题讨论】: