2009-12-04 181 views
0

如何确定我在屏幕上触摸的是什么UIImageView?例如,我在UIView中添加了10x10平铺的UIImageView。现在在触摸开始,我怎么能知道我在屏幕上触摸的图像?我应该在这个实现中使用hitTest方法吗?UIImageView触摸事件

谢谢。

回答

2

我通常会发现最简单的方法是继承UIImageView并添加我自己的触摸事件处理程序。

事实上,我经常做的是创建一个UIImageView的子类,唯一的目的是允许另一个类作为下一个响应者。这样我就不必为任何情况而划分子类。如果你需要大量的这些视图,那么这是唯一值得做的事情,而且你还没有对它们进行子类化。

0

这个问题在这里被问了很多次。尝试下次使用搜索。我通常使用自定义样式的UIButton来做你想做的事。这样的变体为您提供了标准的方法来捕捉触摸而不需要子类化。

0

要跟进UIButton建议,下面是我为UIButton所做的一个片段,该片段以UIImage呈现。

这是用于跟踪得到了UITableViewCell内所触摸的特定UIButton图像类型,并沿此UIButton放在行和部分而过:

UIButton *_infoButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 30, 30)]; 
[_infoButton setImage:[UIImage imageNamed:@"Info.png"] forState:UIControlStateNormal]; 
[_infoButton setTitle:[NSString stringWithFormat:@"%d:%d", indexPath.section, indexPath.row] forState:UIControlStateReserved]; 
[_infoButton addTarget:self action:@selector(touchedDetailedInfoButton:) forControlEvents:UIControlEventTouchDown]; 
// ... 
[ _infoButton release]; 

下面是用于恢复相关的方法标题和做一些有趣的事情吧:

- (void) touchedDetailedInfoButton:(NSString *)title { 
    unsigned int _section, _row; 
    const char * _indexPathCharPtr = [title cStringUsingEncoding:NSUTF8StringEncoding]; 
    sscanf(_indexPathCharPtr, "%d:%d", &_section, &_row); 
    NSUInteger _path[2] = {_section, _row}; 
    NSIndexPath *_touchedIndexPath = [[NSIndexPath alloc] initWithIndexes:_path length:2]; 
    [self doSomethingInterestingWithIndexPath:_touchedIndexPath]; 
    [_touchedIndexPath release]; 
} 

很可能有更简单的方法去了解这一点,所以希望别人来沿,并提供一种替代(比subcla其他也是UIImageView,这也是一个非常有效的选择)。