放大 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】:

UIPinchGestureRecognizerUIPanGestureRecognizer 添加到您的绘图视图。然后处理来自他们的委托事件以更新您的比例和偏移量。然后,您最终使用生成的比例和偏移量来重绘(通常通过调用 setNeedsDisplay())。

我可以根据经验告诉你,这些计算有点棘手但可行。

【讨论】:

以上是关于放大 UIView 而不像素化的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 捏放大到 CGContextStrokePath 而不改变线宽

ObjectAnimator 像素化 TextView

Photoshop 基础七 位图 矢量图 栅格化

如何正确更新使用 CGContextScaleCTM 和 CGContextTranslateCTM 放大和翻译的 uiview

kCAFilterNearest 放大过滤器 (UIImageView)

飞链云版图-像素放大器