如何正确更新使用 CGContextScaleCTM 和 CGContextTranslateCTM 放大和平移的 uiview
How to correctly update a uiview magnified and translated with CGContextScaleCTM and CGContextTranslateCTM
我有一个 uiview B,它是另一个 uiview A 的放大部分("touchPoint" 周围的区域被放大了)。
当 "touchPoint" 更改时,我希望 B 更新其显示。我在 B 中有以下函数并且它确实更新(当我调用 B.setNeedsDisplay() 时),但它使旧内容以某种方式可见,就像褪色的背景图像一样。
你们知道为什么旧内容仍然出现,为什么效果会变淡吗?
是因为我放大的区域有透明背景吗?
如何解决?
override func drawRect(rect: CGRect)
{
let context: CGContextRef = UIGraphicsGetCurrentContext()
CGContextTranslateCTM(context,1*(self.frame.size.width*0.5),1*(self.frame.size.height*0.5))
CGContextScaleCTM(context, 1.5, 1.5)
CGContextTranslateCTM(context,-1*(touchPoint.x),-1*(touchPoint.y))
viewToMagnify.layer.renderInContext(context)
}
我想要 post 一张图片,但我还没有足够的 Whosebug 积分...:-)
感谢指点!
找到了我自己问题的答案。
必须在 drawRect 函数开始时清除放大视图的上下文,如下所示:
CGContextClearRect(context, rect)
我有一个 uiview B,它是另一个 uiview A 的放大部分("touchPoint" 周围的区域被放大了)。 当 "touchPoint" 更改时,我希望 B 更新其显示。我在 B 中有以下函数并且它确实更新(当我调用 B.setNeedsDisplay() 时),但它使旧内容以某种方式可见,就像褪色的背景图像一样。 你们知道为什么旧内容仍然出现,为什么效果会变淡吗? 是因为我放大的区域有透明背景吗? 如何解决?
override func drawRect(rect: CGRect)
{
let context: CGContextRef = UIGraphicsGetCurrentContext()
CGContextTranslateCTM(context,1*(self.frame.size.width*0.5),1*(self.frame.size.height*0.5))
CGContextScaleCTM(context, 1.5, 1.5)
CGContextTranslateCTM(context,-1*(touchPoint.x),-1*(touchPoint.y))
viewToMagnify.layer.renderInContext(context)
}
我想要 post 一张图片,但我还没有足够的 Whosebug 积分...:-)
感谢指点!
找到了我自己问题的答案。
必须在 drawRect 函数开始时清除放大视图的上下文,如下所示:
CGContextClearRect(context, rect)