Cocoa touch 如何将子视图上触摸事件的坐标转换为其父视图中的坐标?

Cocoa touch 如何将子视图上触摸事件的坐标转换为其父视图中的坐标?,cocoa-touch,uikit,ios,Cocoa Touch,Uikit,Ios,我正在潜入iOS开发,我正在玩触摸事件。我有一个名为UIPuzzlePiece的类,它是UIImageView的一个子类,它表示可以在屏幕上移动的拼图块对象。我的目标是能够用手指在屏幕上移动拼图块 目前,我在UIPuzzlePiece类中实现了TouchesStart和touchesMoved事件 // Handles the start of a touch - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

我正在潜入iOS开发,我正在玩触摸事件。我有一个名为
UIPuzzlePiece
的类,它是
UIImageView
的一个子类,它表示可以在屏幕上移动的拼图块对象。我的目标是能够用手指在屏幕上移动拼图块

目前,我在
UIPuzzlePiece
类中实现了TouchesStart和touchesMoved事件

// Handles the start of a touch
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
  UITouch *touch = [[event touchesForView:self] anyObject];
  CGPoint cgLocation = [touch locationInView:self];
  [self setCenter:cgLocation];
}

// Handles the continuation of a touch.
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{  
  UITouch *touch = [[event touchesForView:self] anyObject];
  CGPoint cgLocation = [touch locationInView:self];
  [self setCenter:cgLocation];
}
我面临的问题是返回的CGPoint位置表示UIPiecle视图中的位置,这很有意义,但我需要知道父视图中触摸的位置。这样,语句
[self-setCenter:cgLocation]
实际上会将UIPuzzlePiece移动到触摸的位置。我总是可以编写一些黑客算法来转换它,但我希望有更好或更简单的方法来实现我的目标。如果我只有一个拼图块,我会在父视图的视图控制器中实现触摸事件代码,但是我有很多拼图块,这就是为什么我在UIPuzzlePiece视图中处理它

你的想法?
非常感谢你的智慧

UIView实现了
-convertRect:fromView:
-convertRect:toView:
-convertPoint:fromView:
-convertPoint:toView:
。听起来您只需要使用后一种方法在视图坐标空间之间进行转换。例如,如果您想将一个CGPoint从
self
的坐标空间转换为父视图,您可以使用
[self-convertPoint:point-to-view:self.superview]
或使用
[self.superview-convertPoint:point-fromView:self]
(它们也会这样做)。

您为什么要求
[事件触摸ForView:self]
而不是只使用提供的
触摸
参数?因为我是一个傻瓜,谢谢你指出这一点!