我正在尝试使用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);
我试图摆脱我在旋转时设置的上下文,并在视图旋转时重新初始化它,认为这是问题,但我不确定我做得对。
答案 0 :(得分:0)
您不应该直接自己绘制该图像。即使您设置了自己的上下文并正确地绘制它,您也必须以某种方式将其刷新到屏幕上。这就是为什么UIKit在视图上调用drawRect:
之前为您设置上下文的原因。它已准备好将东西放在屏幕上,它只需要知道放在那里的东西。
您可以设置自己的图片上下文并在touchesBegan:
等中进行绘制,但是您应该使用UIGraphicsGetImageFromCurrentImageContext
将其转换为图像,调用[myImageView setImage:theImageIJustGot]
,然后[myImageView setNeedsDisplay]
。这标志着UIKit你有新的东西放在屏幕上,UIKit将负责其余的事情。