使用 touchesMoved: 在自定义单元格中确定触摸是不是在图像上
Posted
技术标签:
【中文标题】使用 touchesMoved: 在自定义单元格中确定触摸是不是在图像上【英文标题】:Determining that touch is over an image using touchesMoved: in custom cell使用 touchesMoved: 在自定义单元格中确定触摸是否在图像上 【发布时间】:2011-11-01 20:06:55 【问题描述】:我有一个自定义单元格,其中有一个图像视图 flag
。使用这种方法,当我将光标移到图像上时,控件不会进入if
。我在其他类中使用此方法没有问题,但使用自定义单元格时它不起作用。
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
[super touchesMoved:touches withEvent:event];
UITouch *touch = [[event allTouches] anyObject];
if ([touch view] == flag)
NSLog(@"flag"); // Does not enter here
// But here
【问题讨论】:
【参考方案1】:以下内容可能会引导您找到答案。如果您想要获取触摸,则必须覆盖 UITableView 或您的 UITableViewCell。通过覆盖 UITableViewCell 中的触摸,您可以评估哪个视图被触摸,就像您当前正在做的那样。需要注意的一点是,如果您触摸内容视图并在图像视图上移动,您正在触摸的视图(因此由触摸集返回)仍将是内容视图。如果您触摸 UIImageView,您将获得该视图返回并将导致您的 NSLog 被写出。
就像你必须设置的一个额外点,
[self.flag setUserInteractionEnabled:YES];
或者您可以检查属性检查器中的交互复选框。确保触发触摸事件。我不确定这是否能准确回答您的问题,但希望对您有所帮助。
这是我遇到的问题和解决方案,希望对您有所帮助。我的问题是我有一个 UIView,上面有一个 UITableView 和其他几个较小的 UIView。我希望能够将较小的视图拖放到表格中的单元格上,设置 UITableViewCell 图像以匹配所触摸的较小视图的 CALayer。这是我使用的触摸代码。
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
UITouch *t =[touches anyObject];
UIGraphicsBeginImageContext(t.view.bounds.size);
[t.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.draggedView = [[UIImageView alloc] initWithImage:img];
CGPoint centre = [[touches anyObject] locationInView:self.view];
[self.draggedView setCenter:centre];
[self.draggedView setAlpha:0.5];
[self.view addSubview:self.draggedView];
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
CGPoint centre = [[touches anyObject] locationInView:self.view];
[self.draggedView setCenter:centre];
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
CGPoint centre = [[touches anyObject] locationInView:self.view];
UIView *hit = [self.tableView hitTest:centre withEvent:event];
UIGraphicsBeginImageContext(self.draggedView.bounds.size);
[self.draggedView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
if(hit!=nil)
UITableViewCell *tvc = (UITableViewCell *)hit.superview;
[tvc.imageView setImage:img];
UITableView *tv = (UITableView *)tvc.superview;
NSIndexPath *ip = [tv indexPathForCell:tvc];
[tv deselectRowAtIndexPath:ip animated:YES];
[self.draggedView removeFromSuperview];
self.draggedView = nil;
touchesEnded 中的命中测试返回 UITableViewCellContentView 以便获取 Cell 我只要求它的超级视图。
【讨论】:
哇!非常感谢!很有帮助。以上是关于使用 touchesMoved: 在自定义单元格中确定触摸是不是在图像上的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UITableView 的单元格中为 UIImageView 获取 touchesMoved?