我正在为一门课做作业,需要一点方向。我正在使用一个应用程序,将触摸事件和随后的手指拖动转换为屏幕上的绘图。我需要弄清楚如何在数组中保存每个绘图,并将其全部删除以响应摇动事件。
这是非常基本的 - 有一个HomeViewController(UIViewController)和占用窗口的DoodleView(UIView)。 HomeViewController有一个doodleview属性,在viewDidLoad方法中,创建一个实例,将其分配给self.doodleview,然后调用addSubview。 touchesBegan,touchesMoved和touchesEnded方法属于doodleview类。现在,每次单击并拖动都会删除上一个。
我保存它们的最初尝试是创建HomeViewController的NSMutableArray“doodleViews”属性,认为每个touchesBegan事件都是创建一个新的doodleView实例,并且只是在该数组的最后一个元素上调用addSubview。这不起作用,我不知道为什么。任何提示都表示赞赏。
以下是HomeViewController的一个片段:
- (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的摘录:
- (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];
}
答案 0 :(得分:0)
您可能希望在UIBezierPath *path
方法中将NSMutableArray
保存到touchesEnded
。然后在您的绘图代码中迭代数组并绘制每条路径。
如果从该阵列中轻轻摇动removeAllObjects
。