放大 UIView 而不像素化
Posted
技术标签:
【中文标题】放大 UIView 而不像素化【英文标题】:Zoom into UIView without pixelating 【发布时间】:2017-08-04 14:04:54 【问题描述】:我有一个使用 UIBezierpaths(矢量)的绘图应用程序,我正在尝试创建一个函数,允许我像其他绘图应用程序一样缩放画布/UIView。我不想放大单个贝塞尔路径,我已经知道该怎么做。我想要一个缩放功能像 safari,它可以缩放画布/视图。
如果我使用以下代码:
self.transform = CGAffineTransform(scaleX: 2, y: 2)
这个:
变成这个,你会注意到它非常模糊/不平滑,就像向量应该是这样的:
但我希望它看起来像这样,这在另一个绘图应用程序上会发生
我知道这个问题可能有一个复杂的答案,但我自己很难找到答案。
【问题讨论】:
如果你想实现矢量缩放,你应该自己重新计算点。CGAffineTransform
不是基于向量的。
CGaffinetransform 确实可以正确放大 uibezierpaths,但我想转换视图
【参考方案1】:
我制作了一个可以放大的绘图应用程序。我不记得我是如何处理这个问题的。 但我认为你绝对应该使用 UIScrollView 来管理缩放/拖动部分。UIImageView pinch zoom swift
您将能够几乎免费地进行缩放、拖动等操作。 而且我认为它不会被像素化
【讨论】:
谢谢。假设这不是解决方案,我之前一直在玩这个但没有成功,但现在你已经告诉我这可能是解决方案,我会继续尝试【参考方案2】:将UIPinchGestureRecognizer
和UIPanGestureRecognizer
添加到您的绘图视图。然后处理来自他们的委托事件以更新您的比例和偏移量。然后,您最终使用生成的比例和偏移量来重绘(通常通过调用 setNeedsDisplay()
)。
我可以根据经验告诉你,这些计算有点棘手但可行。
【讨论】:
以上是关于放大 UIView 而不像素化的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollView 捏放大到 CGContextStrokePath 而不改变线宽
如何正确更新使用 CGContextScaleCTM 和 CGContextTranslateCTM 放大和翻译的 uiview