当在iOS中覆盖绘制rect时,为什么翻译的UIBezierPaths会因为调整自定义UIView的大小而被区别对待?

时间:2017-07-02 01:32:15

标签: ios uiview uibezierpath

我在自定义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的大小相同,因此路径将被截断。

你能解释为什么会发生这种情况和/或如何制作一个与绘制路径相同的翻译路径吗?

0 个答案:

没有答案