Ios 在uiimageview上使用Quartz 2D绘制-线条变得模糊

Ios 在uiimageview上使用Quartz 2D绘制-线条变得模糊,ios,xcode,drawing,core-graphics,cgcontext,Ios,Xcode,Drawing,Core Graphics,Cgcontext,这是一个与在iPad应用程序视图中使用核心图形绘制路径(响应触摸事件)相关的问题 我有一个视图作为滚动视图的一部分,我想在其中跟踪触摸的路径。下面的代码适用于应用程序中的其他UIImageView,但不适用于此特定子视图。当我画图时(通过在屏幕上跟踪/触摸),线条会出现,但会开始沿y方向移动。所以,整个轨迹一直在y方向压缩!!当线条向上移动时,它们似乎也会扩散并最终消失 相同的代码适用于scrollview之外的不同视图。我在网上搜索了3天,花了几个小时试图了解这里发生了什么,但我仍然没有任何线

这是一个与在iPad应用程序视图中使用核心图形绘制路径(响应触摸事件)相关的问题

我有一个视图作为滚动视图的一部分,我想在其中跟踪触摸的路径。下面的代码适用于应用程序中的其他UIImageView,但不适用于此特定子视图。当我画图时(通过在屏幕上跟踪/触摸),线条会出现,但会开始沿y方向移动。所以,整个轨迹一直在y方向压缩!!当线条向上移动时,它们似乎也会扩散并最终消失

相同的代码适用于scrollview之外的不同视图。我在网上搜索了3天,花了几个小时试图了解这里发生了什么,但我仍然没有任何线索。如有任何帮助/建议,将不胜感激

谢谢

以下是我的绘图代码:

UIGraphicsBeginImageContext(coverIVFragments.frame.size);
            [coverIVFragments.image drawInRect:CGRectMake(0, 0, coverIVFragments.frame.size.width, coverIVFragments.frame.size.height)];
            CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
            CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 2.0);
            CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), red, green, blue, 1.0);
            CGContextBeginPath(UIGraphicsGetCurrentContext());
            CGContextMoveToPoint(UIGraphicsGetCurrentContext(), x1, y1);
            CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), x2, y2);
            CGContextStrokePath(UIGraphicsGetCurrentContext());

            coverIVFragments.image = UIGraphicsGetImageFromCurrentImageContext();
            UIGraphicsEndImageContext();

首先,您应该使用一种新方法,它采用一个比例,而不是UIGraphicsBeginImageContext(在iPad上,不需要Xcode)

可能问题在于与滚动视图的交互。在例程日志的顶部,滚动视图contentOffset和帧。您一直假设原点为0,0,但实际上您想要的帧很可能是sv.contentOffset和sv.bounds.size的组合

对我来说,我经常记录这类问题,很快我就会明白我需要做什么

编辑:您的问题是使用非整数矩形-此行在不缩放的情况下更正了问题:

   coverImageView.frame = CGRectIntegral(coverImageView.frame);
   UIGraphicsBeginImageContextWithOptions(coverImageView.frame.size, NO, imageScrollView.zoomScale);

我认为您没有正确使用“scale”参数-可能您应该调整绘图将进入的矩形的大小,只需根据其预期目的使用scale并将“0”传递到其中。

首先,您应该使用新方法,该方法采用比例,而不是UIGraphicsBeginImageContext(在iPad上,无Xcode可用)

可能问题在于与滚动视图的交互。在例程日志的顶部,滚动视图contentOffset和帧。您一直假设原点为0,0,但实际上您想要的帧很可能是sv.contentOffset和sv.bounds.size的组合

对我来说,我经常记录这类问题,很快我就会明白我需要做什么

编辑:您的问题是使用非整数矩形-此行在不缩放的情况下更正了问题:

   coverImageView.frame = CGRectIntegral(coverImageView.frame);
   UIGraphicsBeginImageContextWithOptions(coverImageView.frame.size, NO, imageScrollView.zoomScale);

我认为您没有正确使用“缩放”参数-可能您应该调整绘图将进入的矩形的大小,只需根据预期目的使用“缩放”并将“0”传递到那里。

谢谢David。我在scrollview外有一个uiimageview,从中获取触摸事件,然后在作为scrollview子视图的图像视图上绘制线条。我希望这将防止对scrollview的任何干扰。当我记录滚动视图及其子视图边界和偏移时,它们看起来很好。当我放大到最大值时,我确实发现这个问题消失了,所以缩放比例会影响绘图(仅在y方向,而不是x方向)。我还禁用了scrollview的用户交互,并希望这样可以防止绘图过程中边界/偏移的任何更改。如果您无法理解,然后你需要在DropBox或equiv上发布一个演示应用程序,让其他人看一看。这需要你花一些时间,但可能会以如何解决问题的信息结束。谢谢David。下面是示例代码:如果您在运行此程序时遇到任何问题,请告诉我。谢谢。最后,我从srollview中删除了正在绘制的视图。这或多或少会起作用,但当放大到图像中时,图形会变得非常缓慢。此外,线条变得模糊的问题还没有完全解决。如果你能看看这一点,并提出一些更好的方法来实现这一点,我将不胜感激。下面是代码:如果您在运行此程序时遇到任何问题,请告诉我。谢谢David。我在scrollview外有一个uiimageview,从中获取触摸事件,然后在作为scrollview子视图的图像视图上绘制线条。我希望这将防止对scrollview的任何干扰。当我记录滚动视图及其子视图边界和偏移时,它们看起来很好。当我放大到最大值时,我确实发现这个问题消失了,所以缩放比例会影响绘图(仅在y方向,而不是x方向)。我还禁用了scrollview的用户交互,并希望这样可以防止绘图过程中边界/偏移的任何更改。如果您无法理解,然后你需要在DropBox或equiv上发布一个演示应用程序,让其他人看一看。这需要你花一些时间,但可能会以如何解决问题的信息结束。谢谢David。下面是示例代码:如果您在运行此程序时遇到任何问题,请告诉我。谢谢。最后,我从srollview中删除了正在绘制的视图。这或多或少会起作用,但当放大到图像中时,图形会变得非常缓慢。此外,线条变得模糊的问题还没有完全解决。如果你能看看这一点,并提出一些更好的方法来实现这一点,我将不胜感激。下面是代码:如果您在运行时遇到任何问题,请告诉我。