检测物体,触摸移动和UITouch

时间:2012-07-20 10:37:22

标签: ios uitouch touchesmoved

我有一个UIView,我在哪里添加带有ID的球。当我用ID 1触摸球时,我用手指画出一条虚线。

问题是当我将手指移动到其他球时,我不知道如何检测这些球并检查它们的ID。我需要发生的是当我用ID 2触摸下一个球时,线完成绘制并从球1停留到球2,然后创建一个从2到手指,下一个...等等......

代码:

#import "DrawView.h"

@implementation DrawView

- (id)init
{
    self = [super initWithFrame:CGRectMake(0, 0, 1024, 768)];
    if (self) {
        self.backgroundColor = [UIColor clearColor];
        self.opaque = YES;

        checkPointCircle = [[CheckPointCircle alloc] initWithPosX:315 posY:138 andNumber:1];
        checkPointCircle.userInteractionEnabled = YES;
        [self addSubview:checkPointCircle];

        checkPointCircle = [[CheckPointCircle alloc] initWithPosX:706 posY:138 andNumber:2];
        checkPointCircle.userInteractionEnabled = YES;
        [self addSubview:checkPointCircle];

        checkPointCircle = [[CheckPointCircle alloc] initWithPosX:315 posY:526 andNumber:3];
        checkPointCircle.userInteractionEnabled = YES;
        [self addSubview:checkPointCircle];

        checkPointCircle = [[CheckPointCircle alloc] initWithPosX:706 posY:526 andNumber:4];
        checkPointCircle.userInteractionEnabled = YES;
        [self addSubview:checkPointCircle];

    }
    return self;
}

- (Line *)drawLine {
    return drawLine;
}

- (void)setDrawLine:(Line *)line
{
    drawLine = line;
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];

    CheckPointCircle * checkTouch = (CheckPointCircle *)touch.view;

    if (touch.view.class == checkPointCircle.class) {
        if ([checkTouch getObjectID] == 1) {
            startTouchPoint = CGPointMake([checkTouch center].x, [checkTouch center].y);
            endTouchPoint = [touch locationInView:self];
        }
    }

    self.drawLine = [[Line alloc] initWithPoint:[touch locationInView:self]];
    [self setNeedsDisplay];
}

-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"Cancelado");
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{

    UITouch *touch = [touches anyObject];

    UITouch *secondaryTouch = (UITouch *)[[[event touchesForView:checkPointCircle] allObjects] objectAtIndex: 0];

    NSLog(@"Que toco: %@ ", secondaryTouch.view);

    if (touch.view.class == checkPointCircle.class) {
        CheckPointCircle * checkTouch = (CheckPointCircle *)touch.view;
        if ([checkTouch getObjectID] == 1) {
            endTouchPoint = [touch locationInView:self];
        }
    }
    [self setNeedsDisplay];
}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CheckPointCircle * checkTouch = (CheckPointCircle *)touch.view;

    if (touch.view.class == checkPointCircle.class) {
        if ([checkTouch getObjectID] == 1) {
            endTouchPoint = [touch locationInView:self];
        }
    }
    [self setNeedsDisplay];
}

- (void)drawRect:(CGRect)rect
{
    [drawLine drawLineFrom:startTouchPoint to:endTouchPoint];
}

@end

如何检测其他球以获取ID。

任何人都可以帮助我吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

类UIView(https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instm/UIView/hitTest:withEvent:)的Apple文档列出了两种方法,它们将确定哪个视图包含一个匹配/点:

– hitTest:withEvent:
– pointInside:withEvent:

对于大多数人来说,hitTest可能会有所帮助:它的描述为“返回包含指定点的视图层次结构(包括其自身)中接收器的最远的后代。”,因此它甚至可以根据需要转换坐标。

如果你在touchesMoved:方法中检查[self hitTest:[touch.locationInView self] withEvent:event](或类似的,没有代码完成; - )=,你应该能够检测到手指何时结束其他圈子。

希望这有帮助,nobi