gpt4 book ai didi

objective-c - 使用绘图 View 缩放

转载 作者:可可西里 更新时间:2023-11-01 05:37:47 26 4
gpt4 key购买 nike

我正在寻找一种解决方案,以便对绘图 View 进行漂亮的缩放。在我的应用程序中,我有一个带有另一个 UIView 的 View (用作绘图 View ),当我在其上绘制笔划时,笔划是完美的。但是当我缩放 View 时,我得到了这个非常丑陋的效果(像素化笔划):screen shot
(来源:imagup.com)

url image

有没有正确的中风解决方案?

我的 UIViewController 有这样的层次结构:

  • UIViewController
    • ScrollView
      • View 可缩放(使用 viewForZoomingInScrollView 方法定义)
        • 图片查看
        • 绘图 View

非常感谢!

问候,塞巴斯蒂安 ;)

最佳答案

我正在制作一个矢量绘图应用程序,让我告诉你,要正确完成这不是一项微不足道的任务,需要大量的工作。

需要注意的一些问题:

  • 如果您不使用矢量图形(例如,CGPaths,矢量)你将无法删除像素化。一个 UIImage,例如,只有这么多分辨率。
  • 为了让你的画看起来不像素化,你要必须重绘一切。如果你有很多图画,这可以是一项昂贵的任务。
  • 拥有良好的分辨率,但缩放几乎是不可能的,因为它需要非常大的上下文,并且您的绘图可能会超出设备的能力

我使用核心图形来绘制,所以我解决这个问题的方法是分配和管理多个 CGContext,并将它们用作缓冲区。我有一个上下文始终保持在我的最小缩放级别(比例因子为 1)。该上下文始终被引入并使它在完全取消缩放时不会花费时间重新绘制,因为它已经完成了。另一个上下文仅用于缩放时的绘图。当未缩放时,该上下文将被忽略(因为无论如何都必须根据新的缩放级别重新绘制它)。我如何执行缩放的高级算法如下:

- (IBAction)handlePinchGesture:(UIGestureRecognizer *)sender
{
if(sender.state == UIGestureRecognizerStateBegan)
{
//draw an image from the unzoomedContext into my current view

//set the scale transformation of my current view to be equal to "currentZoom", a property of the view that keeps track of the actual zoom level
}
else if(sender.state == UIGestureRecognizerStateChanged)
{
//determine the new zoom level and transform the current view, keeping track in the currentZoom property

//zooming will be pixelated.
}
else if(sender.state == UIGestureRecognizerStateEnded || sender.state == UIGestureRecognizerStateCancelled)
{
if(currentZoom == 1.0)
{
//you are done because the unzoomedContext image is already drawn into the view!
}
else
{
//you are zoomed in and will have to do special drawing

//perform drawing into your zoomedContext
//scale the zoomedContext

//set the scale of your current view to be equal to 1.0

//draw the zoomedContext into the current view. It will not be pixelated!

//any drawing done while zoomed needs to be "scaled" based on your current zoom and translation amounts and drawn into both contexts
}

}

}

这对我来说变得更加复杂,因为我有额外的缓冲区缓冲区,因为在有很多绘图的情况下绘制我的路径图像比绘制路径快得多。

在管理多个上下文、调整代码以有效地绘制到多个上下文、遵循适当的 OOD、根据当前缩放和平移缩放新绘图等之间,这是一项艰巨的任务。希望这可以激励您并让您走上正确的轨道,或者您认为摆脱像素化不值得付出努力:)

关于objective-c - 使用绘图 View 缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12161123/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com