我大概的想法是这样,不确定实际执行中会遇到什么问题 比如我建个全局数组叫myDrawing 然后在touchgegan中这样 - (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { for (UITouch *touch in touches) { [myDrawing addObject:[[NSMutableArray alloc] initWithCapacity:40]]; CGPoint curPoint = [touch locationInView:self]; [[myDrawing lastObject] addObject:[NSNumber numberWithFloat:curPoint.x]]; [[myDrawing lastObject] addObject:[NSNumber numberWithFloat:curPoint.y]]; } } 在move和end方法中和上面的类似,只是不要创建数组了 - (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { for (UITouch *touch in touches) { CGPoint curPoint = [[touches anyObject] locationInView:self]; [[myDrawing lastObject] addObject:[NSNumber numberWithFloat:curPoint.x]]; [[myDrawing lastObject] addObject:[NSNumber numberWithFloat:curPoint.y]]; //如果需要立即显示 [self setNeedsDisplay]; } } 最后你可以写个简单的方法清楚所有的笔划 -(void)cancelDrawing { [myDrawing removeAllObjects]; [self setNeedsDisplay]; } 这是我的想法,具体的实现可能有很多细节,比如你不能直接用for in循环来遍历touches,因为这样有可能和数组中的lastObject对应不上,具体的你自己调试一下 我觉的这个方向应该没啥问题吧
为啥不能动态生成数组? 你可以定义一个全局的数组,在drawRect 的方法中获取这个全局数组中的数据来画线,然后把每个手指产生的座标点各自放在一个数组里,最后把这些数组都放到全局的那个数组里就行了,就是数组中存数组
可以给你个思路(demo是需要时间和精力的,除非正好写过,一般人家是不会有时间特意去写的) 首先你可以把问题简化,先实现一个手指画轨迹的功能,实现这个功能很简单,初始化一个数组,在touchbegin,touchmove,touchend方法中获取对应的座标存到数组中,然后在drawRect方法中用CGContextAddLineToPoint把这些点连起来就行了,当有新座标点加入到数组中的时候调用一下setNeedDisplay方法就能把最新的点画上去 现在再来考虑多手指的问题,已经很清晰了,通过NSOperation对每个手指创建一个线程,每个线程都调用上面单独一个手指的画线方法. 再看一下touchBegan方法的定义 - (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 其中touches是个NSSet,你可以理解为这里面装的每一个UITouch对象就是一个根手指
29,028
社区成员
12,466
社区内容
加载中
试试用AI创作助手写篇文章吧