我正在为课程布置作业,需要一些指导。我正在使用一个将触摸事件和随后的手指拖动转换为屏幕上图形的应用程序。我需要弄清楚如何将每个图形保存在一个数组中,并删除它们以响应震动事件。

这很基本-有一个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];
}

最佳答案

您可能需要将UIBezierPath *path保存到NSMutableArray方法中的touchesEnded中。然后在您的绘图代码中遍历数组并绘制每个路径。

摇晃时,只需从该数组中removeAllObjects即可。

关于iphone - iPhone-在屏幕上绘图以响应触摸事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8056624/

10-14 21:41