UIBezierPath 在故事板和模拟器中的绘制方式不同
UIBezierPath draws differently in storyboard and simulator
我正在创建自定义 IBDesignable
控件,我想在其中绘制一组 正方形 。我有一个 draw(_ rect:)
方法执行以下操作:
override func draw(_ rect: CGRect) {
// ... skipped ...
for i in 0 ..< 7 {
for j in 0 ... 6 {
let x = Double(i) * (cellSize + space)
let y = Double(j) * (cellSize + space)
let rectangle = CGRect(x: x, y: y, width: cellSize, height: cellSize)
let face = UIBezierPath(roundedRect: rectangle, cornerRadius: CGFloat(0))
face.fill()
}
}
}
当我将组件添加到 Interface Builder 中并且我可以看到方块时,这工作得很好。但是当我在模拟器中 运行 它绘制矩形但 不是正方形 :
这看起来很奇怪,因为 width
等于 height
。即使我用线条绘制它也以同样的方式工作:
let face = UIBezierPath()
face.move(to: CGPoint(x: x, y: y))
face.addLine(to: CGPoint(x: x + cellSize, y: y))
face.addLine(to: CGPoint(x: x + cellSize, y: y + cellSize))
face.addLine(to: CGPoint(x: x, y: y + cellSize))
face.close()
或者如果我使用常规的非圆角矩形:
let face = UIBezierPath(rect: rectangle)
有什么想法是错误的吗?
时间问题。视图是使用正方形绘制的,但随后对界面进行了布局,视图的高度变小了一点,或者宽度变大了一点。绘图已缓存 - 您没有将视图设置为 redrawn 当它的边界发生变化时 - 因此绘图现在略微扭曲,就好像已对其应用缩放变换,水平值与垂直值不同.因此正方形不再是正方形。
我正在创建自定义 IBDesignable
控件,我想在其中绘制一组 正方形 。我有一个 draw(_ rect:)
方法执行以下操作:
override func draw(_ rect: CGRect) {
// ... skipped ...
for i in 0 ..< 7 {
for j in 0 ... 6 {
let x = Double(i) * (cellSize + space)
let y = Double(j) * (cellSize + space)
let rectangle = CGRect(x: x, y: y, width: cellSize, height: cellSize)
let face = UIBezierPath(roundedRect: rectangle, cornerRadius: CGFloat(0))
face.fill()
}
}
}
当我将组件添加到 Interface Builder 中并且我可以看到方块时,这工作得很好。但是当我在模拟器中 运行 它绘制矩形但 不是正方形 :
这看起来很奇怪,因为 width
等于 height
。即使我用线条绘制它也以同样的方式工作:
let face = UIBezierPath()
face.move(to: CGPoint(x: x, y: y))
face.addLine(to: CGPoint(x: x + cellSize, y: y))
face.addLine(to: CGPoint(x: x + cellSize, y: y + cellSize))
face.addLine(to: CGPoint(x: x, y: y + cellSize))
face.close()
或者如果我使用常规的非圆角矩形:
let face = UIBezierPath(rect: rectangle)
有什么想法是错误的吗?
时间问题。视图是使用正方形绘制的,但随后对界面进行了布局,视图的高度变小了一点,或者宽度变大了一点。绘图已缓存 - 您没有将视图设置为 redrawn 当它的边界发生变化时 - 因此绘图现在略微扭曲,就好像已对其应用缩放变换,水平值与垂直值不同.因此正方形不再是正方形。