代码之家  ›  专栏  ›  技术社区  ›  CalZone

如何枚举2个触点目标C

  •  0
  • CalZone  · 技术社区  · 11 年前

    为了找到两个接触点的坐标,然后找到两个点之间的距离,从而生成旋转中心,我使用以下代码。我不确定这是否是最好的方法。

    - (void) touchesMoved:(NSSet *)touches withEvent: (UIEvent *)event
    
    <SOME CODE>
    
    
    if([touches count] == 2){
        for(touch in touches){
            if(self.pt1Flag){
                self.pt2=[touch locationInView:self.superview];
                self.pt2Flag = YES;
                self.pt1Flag = NO;
            }
            else{
                self.pt1 = [touch locationInView:self.superview];
                self.pt1Flag = YES;
                self.pt2Flag = NO;
            }
    
        }
    }
    
    self.delta = [self lengthDifferencePoint:self.pt1 andPoint:self.pt2 equiDistantFromPoint:self.center];
    
    <SOME CODE>
    
    }
    

    主要是单指触摸。有合适的方法吗? 我也知道

     [touches enumerateObjectsUsingBlock:^(id obj, BOOL *stop){
    }];
    

    有人能解释一下这个块的用法吗?找到接触点的坐标,或者比我的更好/更干净的解决方案。

    2 回复  |  直到 11 年前
        1
  •  2
  •   guenis    11 年前

    enumerateObjectsUsingBlock在这种情况下对您没有帮助,您没有在对象中进行筛选或任何类型的处理。事实上,for In循环本身也枚举了对象。

    但是,如果您知道只有两个对象不需要遍历它们,您可以简单地:

        NSArray *touchesArray = [touches allObjects];
        self.pt1 = [touchesArray[0] locationInView:self.superview];
        self.pt2 = [touchesArray[1] locationInView:self.superview];
    
        2
  •  1
  •   Thilina Chamath Hewagama    11 年前
    NSArray *touchesArray = [touches allObjects];
    for (int i=0; i< [touchesArray count]; i++) {
        NSString *variable = [NSString stringWithFormat:@"pt%d",i];
        [self setValue:[touchesArray objectAtIndex:i] forKey:variable];
    }