如何确定我在屏幕上触摸的是什么UIImageView?例如,我在UIView中添加了10x10平铺的UIImageView。现在在触摸开始,我怎么能知道我在屏幕上触摸的图像?我应该在这个实现中使用hitTest方法吗?UIImageView触摸事件
谢谢。
如何确定我在屏幕上触摸的是什么UIImageView?例如,我在UIView中添加了10x10平铺的UIImageView。现在在触摸开始,我怎么能知道我在屏幕上触摸的图像?我应该在这个实现中使用hitTest方法吗?UIImageView触摸事件
谢谢。
我通常会发现最简单的方法是继承UIImageView并添加我自己的触摸事件处理程序。
事实上,我经常做的是创建一个UIImageView的子类,唯一的目的是允许另一个类作为下一个响应者。这样我就不必为任何情况而划分子类。如果你需要大量的这些视图,那么这是唯一值得做的事情,而且你还没有对它们进行子类化。
这个问题在这里被问了很多次。尝试下次使用搜索。我通常使用自定义样式的UIButton来做你想做的事。这样的变体为您提供了标准的方法来捕捉触摸而不需要子类化。
要跟进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
,这也是一个非常有效的选择)。