我正在尝试通过触摸来制作在屏幕上绘制形状的应用程序。
我可以从一个点到另一个点画一条线 - 但它会在每次新抽奖时消失。
这是我的代码:
CGPoint location;
CGContextRef context;
CGPoint drawAtPoint;
CGPoint lastPoint;
-(void)awakeFromNib{
//[self addSubview:noteView];
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
location = [touch locationInView:touch.view];
[self setNeedsDisplayInRect:CGRectMake(0, 0, 320, 480)];
}
- (void)drawRect:(CGRect)rect {
context = UIGraphicsGetCurrentContext();
[[UIColor blueColor] set];
CGContextSetLineWidth(context,10);
drawAtPoint.x =location.x;
drawAtPoint.y =location.y;
CGContextAddEllipseInRect(context,CGRectMake(drawAtPoint.x, drawAtPoint.y, 2, 2));
CGContextAddLineToPoint(context,lastPoint.x, lastPoint.y);
CGContextStrokePath(context);
lastPoint.x =location.x;
lastPoint.y =location.y;
}
感谢您的帮助 -
尼尔。
答案 0 :(得分:2)
正如您所发现的那样,-drawRect是您显示视图内容的位置。您只能在屏幕上“看到”您在此处绘制的内容。
这比Flash更低级别,你可以在舞台上添加一个包含一行的动画片段,一段时间后再添加另一个包含一行到舞台的动画片段,现在你看到 - 两行!
你需要做一些工作,并且可以设置像......这样的东西。
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
location = [touch locationInView:touch.view];
[self addNewLineFrom:lastPoint to:location];
lastPoint = location;
[self setNeedsDisplayInRect:CGRectMake(0, 0, 320, 480)];
}
- (void)drawRect:(CGRect)rect {
context = UIGraphicsGetCurrentContext();
for( Line *eachLine in lineArray )
[eachLine drawInContext:context];
}
我认为你可以看到如何充实你的需要。
另一种解决方法是使用CALayers。使用这种方法你不会在里面绘制 - - (void)drawRect - 你添加和删除图层,在它们内部绘制你喜欢的东西,视图将处理它们并根据需要绘制到屏幕。可能更多你正在寻找的东西。
答案 1 :(得分:1)
每次调用drawRect
时,都会以空白的方式开始。如果您没有跟踪之前绘制的所有内容以便再次绘制它,那么您最终只会绘制最新的手指,而不是任何旧手指。您必须跟踪所有手指滑动,以便在每次调用drawRect
时重绘它们。
答案 2 :(得分:0)
您可以绘制图像,然后只在drawRect:
方法中显示图像,而不是重新绘制每一行。图像将为您累积线条。当然,这种方法使撤销更难以实现。
来自iPhone Application Programming Guide:
使用UIGraphicsBeginImageContext 功能创建一个新的基于图像 图形上下文。创建之后 上下文,你可以绘制你的形象 将内容放入其中然后使用 UIGraphicsGetImageFromCurrentImageContext 用于生成基于的图像的功能 你画的是什么(如果需要,你可以 甚至继续绘制和生成 其他图片。)当你完成 创建图像,使用 UIGraphicsEndImageContext函数来 关闭图形上下文。如果你 喜欢使用Core Graphics,你可以 使用CGBitmapContextCreate函数 创建位图图形上下文 并将您的图像内容绘制到其中。 完成绘图后,使用 CGBitmapContextCreateImage函数来 从位图创建CGImageRef 上下文。你可以绘制核心 图形图像直接或使用它 初始化UIImage对象。