在升级到Xcode 10后,我发现我的自定义UIView(从UIView派生的类)中的
以下代码片段可以作为playground运行,在我的设置中,它至少显示了上述错误行为的最简设置:
我得到的输出为:
因此,我的明显问题是:
draw(_ rect:CGRect)
例程在应用程序中以错误的rect
调用。事实上,它始终使用rect
作为底层UIView的完整框架进行调用,而不是使用setNeedsDisplay(_ rect:CGRect)
指定的rect
。以下代码片段可以作为playground运行,在我的设置中,它至少显示了上述错误行为的最简设置:
import Foundation
import UIKit
import PlaygroundSupport
class CustomView: UIView {
override func draw(_ rect: CGRect) {
print("rect = \(rect)")
}
}
let customView = CustomView(frame: CGRect(origin: CGPoint.zero, size: CGSize(width: 200.0, height: 200.0)))
PlaygroundPage.current.liveView = customView
print("test")
customView.setNeedsDisplay(CGRect(origin: CGPoint.zero, size: CGSize(width: 100.0, height: 100.0)))
我得到的输出为:
在打印“rect”后的第一个输出是视图的标准完全重绘,但在打印“test”之后的第二个输出会出现问题。此处的输出是由于调用rect = (0.0, 0.0, 200.0, 200.0)
test
rect = (0.0, 0.0, 200.0, 200.0)
customView.setNeedsDisplay
而导致重新绘制,应该是较小的指定矩形(0.0, 0.0, 100.0, 100.0)
。因此,我的明显问题是:
- 您能否重现此行为?
- 我是否遗漏了明显的内容?
- 这是一个错误吗?