在UIImageView的图像上调用drawInRect:使用哪个rect?

时间:2011-05-30 01:06:03

标签: objective-c cocoa-touch ios uiimageview quartz-graphics

我正在尝试使用Quartz图形编写手指画类型程序。我遇到的问题是屏幕旋转时。我画的点和线从我触摸的地方“掠过”。每次连续触摸,前一个点都会消失。这在两种肖像模式中都不会发生,但在两种横向模式下都会发生。

我可能会弄错,但我认为我的问题在于这个电话:

[drawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width , self.view.frame.size.height)];

drawImage在我的主视图控制器的nib文件中是UIImageView

我也尝试过使用以下内容:

[drawImage.image drawInRect:CGRectMake(0, 0, drawImage.frame.size.width, drawImage.frame.size.height  )];

[drawImage.image drawInRect:drawImage.bounds];

[drawImage.image drawInRect:self.view.bounds];

我想我真的不知道是否要使用self或我的UIImageView对象进行此调用。

我在drawInRect调用和设置绘图上下文(保持一致)的位置都试过了。

我在viewDidLoad中设置了这样的上下文(尝试创建一个持久的上下文,我不必在每次绘制时重置事物 - 使用push和pop上下文)。

//---------------- set up a persistent context for drawing -----------------

UIGraphicsBeginImageContext(self.view.frame.size);
context = UIGraphicsGetCurrentContext();
CGContextSetLineCap(context, kCGLineCapRound);
CGContextSetLineWidth(context, curWidth);
CGContextSetRGBStrokeColor(context, curRed, curGreen, curBlue, curAlpha);
UIGraphicsPushContext(context);

我试图摆脱我在旋转时设置的上下文,并在视图旋转时重新初始化它,认为这是问题,但我不确定我做得对。

1 个答案:

答案 0 :(得分:0)

您不应该直接自己绘制该图像。即使您设置了自己的上下文并正确地绘制它,您也必须以某种方式将其刷新到屏幕上。这就是为什么UIKit在视图上调用drawRect:之前为您设置上下文的原因。它已准备好将东西放在屏幕上,它只需要知道放在那里的东西。

您可以设置自己的图片上下文并在touchesBegan:等中进行绘制,但是您应该使用UIGraphicsGetImageFromCurrentImageContext将其转换为图像,调用[myImageView setImage:theImageIJustGot] ,然后[myImageView setNeedsDisplay]。这标志着UIKit你有新的东西放在屏幕上,UIKit将负责其余的事情。