iPhone - 在屏幕上绘图以响应触摸事件
Posted
技术标签:
【中文标题】iPhone - 在屏幕上绘图以响应触摸事件【英文标题】:iPhone - Drawing on the screen in response to touch event 【发布时间】:2011-11-08 20:21:55 【问题描述】:我正在为一门课做作业,需要一些指导。我正在使用一个将触摸事件和随后的手指拖动转换为屏幕上的绘图的应用程序。我需要弄清楚如何将每个绘图保存在一个数组中,并在响应抖动事件时将它们全部删除。
它非常基本 - 有一个 HomeViewController (UIViewController) 和一个占据窗口的 DoodleView (UIView)。 HomeViewController 有一个doodleview 属性,在viewDidLoad 方法中,创建一个实例,赋值给self.doodleview,然后调用addSubview。 touchesBegan、touchesMoved 和 touchesEnded 方法属于 doodleview 类。现在,每次单击和拖动都会删除前一个。
我最初尝试保存它们,是创建 HomeViewController 的 NSMutableArray“doodleViews”属性,认为每个 touchesBegan 事件都在创建一个新的 doodleView 实例,并且只是在该数组的最后一个元素上调用 addSubview。这没有用,我不知道为什么。任何提示都表示赞赏。
这是来自 HomeViewController 的 sn-p:
- (void)viewDidLoad
[super viewDidLoad];
CGRect window = [[UIScreen mainScreen] bounds];
self.doodleView = [[DoodleView alloc] initWithFrame:window];
CircleGestureRecognizer *recognizer = [[CircleGestureRecognizer alloc] initWithTarget:self action:@selector(handleCircleRecognizer:)];
[self.doodleView addGestureRecognizer:recognizer];
[self.view addSubview:self.doodleView];
这是来自 DoodleView 的 sn-p:
- (void) touchesBegan:(NSSet *) touches withEvent:(UIEvent *) event
NSLog(@"touches began");
path = [UIBezierPath bezierPath];
path.lineWidth = 15.0f;
path.lineCapStyle = kCGLineCapRound;
path.lineJoinStyle = kCGLineJoinRound;
UITouch *touch = [touches anyObject];
[path moveToPoint:[touch locationInView:self]];
- (void) touchesMoved:(NSSet *) touches withEvent:(UIEvent *) event
UITouch *touch = [touches anyObject];
[path addLineToPoint:[touch locationInView:self]];
[self setNeedsDisplay];
- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
UITouch *touch = [touches anyObject];
[path addLineToPoint:[touch locationInView:self]];
[self setNeedsDisplay];
【问题讨论】:
【参考方案1】:您可能希望在touchesEnded
方法中将UIBezierPath *path
保存到NSMutableArray
。然后在您的绘图代码中遍历数组并绘制每个路径。
当有震动时,只需从该数组中removeAllObjects
。
【讨论】:
我已经尝试过了,当我这样做时,我得到了 0 个元素:[self.drawings addObject:path]; NSLog(@"%d",self.drawings.count);此外,绘图是实时发生的,因此随着手指的移动,drawRect 被调用,[path stroke] 随之调用。 @大卫;我面前没有那种类型的项目可以看,但是。你试过 [self.drawing addObject:[path copy]] 吗?以上是关于iPhone - 在屏幕上绘图以响应触摸事件的主要内容,如果未能解决你的问题,请参考以下文章