Cocoa touch 如何将子视图上触摸事件的坐标转换为其父视图中的坐标?
我正在潜入iOS开发,我正在玩触摸事件。我有一个名为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 {
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]
而不是只使用提供的触摸
参数?因为我是一个傻瓜,谢谢你指出这一点!