使用自定义UIView的UITouch不起作用

时间:2013-12-17 11:13:38

标签: ios iphone objective-c uiview uitouch

我正在开发一款新游戏,你可以在其中拖动图片。

我已经创建了自己的自定义UIView,UIPuzzle,其中我使用了UIImageView和一些值。 然后我创建了一个名为UIPuzzleView的新类,其中我创建了UIPuzzleUIPuzzle tab[16];

我在主视图上添加它并且工作正常(我尝试为所有这些设置动画)。但后来我想使用-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;来检查点击了哪个UIPuzzle

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

    UITouch* touch = [touches anyObject];

    int i = [self getTouchedView:[touch view]]; // this function returns me what UIPuzzle was clicked

    if(i != NAN){
        NSLog(@"%i", i);
    }
}


-(int) getTouchedView:(UIView*)touch{
    for(int i = 0 ; i < 4*4 ; i ++)
        if(touch == gread[i])
            return i;

    return NAN;
}

这是在视图上添加UIPuzzle的功能

-(void)initGread{

    int value = 0;
    for(int i = 0 ; i < 4 ; i ++){
        for(int j = 0 ; j < 4 ; j ++, value ++){
            // setting size and pozition of single UIPuzzle
            gread[value] = [[UIPuzzle alloc] initWithFrame:CGRectMake(j*70 + 70, i*70 + 70, 120, 120)];
            // setting picture and value to UIPuzzle
            [gread[value] setValue:value picture:[UIImage imageNamed:@"549823.jpg"]];
            // adding UIPuzzle to View
            [self addSubview:gread[value]];                                                                  
        }
    }
}

这应该有效,但事实并非如此。它返回一些随机数,但仅在gread[0]gread[1]gread[4]gread[5]上。

1 个答案:

答案 0 :(得分:0)

我不明白为什么它不起作用。 但不是调用getTouchedView,而是 你可以使用下面的代码

if([[touch view] isKindOfClass:[UIPuzzle class])
  return (  (UIPuzzle*)[touch view]  ).value; //because you are already setting value right.