我在自定义UIView类中重写draw rect:
func drawWithGradient(path:UIBezierPath,linearGradient:LinearGradientAttributeSet) {
let context = self
context.saveGState()
path.addClip()
context.drawLinearGradient(
linearGradient.gradient,
start:linearGradient.start,
end:linearGradient.end,
options:linearGradient.options
)
context.restoreGState()
}
然后,我像这样画画:
let shiftdownAffine = CGAffineTransform(translationX: 0, y: roomAbove)
thePath.apply(shiftdownAffine)
这很有效,UIView完全符合UIBezierPath的大小。 但是,我想要在路径上方留出更多空间,以便绘制更多东西。所以,我使用仿射变换将路径向下移动。 (这是必要的,因为有很多图像,空间量会有所不同。)
save
我没有改变任何其他东西,但魔法消失了。虽然我将新的(已转换的)路径传递给drawWithGradient,但是customUIView与原始UIBezierPath的大小相匹配,而我期望它的行为就像我直接通过绘图代码更改原始UIBezierPath一样。使用已翻译的UIBezierPath,路径将在新位置绘制,但UIView的大小相同,因此路径将被截断。
你能解释为什么会发生这种情况和/或如何制作一个与绘制路径相同的翻译路径吗?