gpt4 book ai didi

ios - 如何在传递给下一个响应者之前更改 UITouch 的位置

转载 作者:行者123 更新时间:2023-12-01 18:25:31 24 4
gpt4 key购买 nike

我有一个父 UIView 和一个子 UIView,我想让触摸从子传递到父,并由两个 View 处理。

y--------------
| parent |
| x------ |
| |child| |
| |_____| |
|_____________|

所以在 subview 中,我覆盖:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
// child touch handle
// ...
// parent touch handle
[self.nextResponder touchesBegan:touches withEvent:event];
}

但是当我触摸 child 中的“x”时,它会转发给 parent 中的“y”(相对于 parent )。

我想要一个通过效果( child 中的`x`, parent 中的`x`),所以我需要在转发之前更改触摸的位置,对吗?

我该怎么做?

谢谢@Fogmeister。就是这样。

UITouch 现在可以传递给父级。而在 parent 的 touchesBegan , 称呼
[touch locationInView:self]

获取触摸位置。

最佳答案

TL:博士

不要进行任何转换,只需使用 locationInView: 方法。

加长版

为此,您可以使用代码 locationInView: 像这样...

UITouch *touch = [touches anyObject]; //assuming there is just one touch.

CGPoint touchPoint = [touch locationInView:someView];

这会将触摸的屏幕坐标转换为您传入的 View 中的坐标。

即,如果用户在 subview 中点击点 (10, 10),然后您将其传递给下一个响应者,即父级。当您运行 [touch locationInView:parentView] 时,您会得到一个类似于 (60, 60) 的点(从您的图表中粗略猜测)。

locationInView 的 UITouch 文档

位置查看:
返回给定 View 坐标系中接收器的当前位置。

-(CGPoint)locationInView:(UIView *)view

参数

看法

您希望触摸位于其坐标系中的 View 对象。处理触摸的自定义 View 可以指定 self 以在其自己的坐标系中获取触摸位置。传递 nil 以获取窗口坐标中的触摸位置。

返回值

指定接收器在视野中的位置的点。

讨论

此方法返回 UITouch 对象在指定 View 坐标系中的当前位置。因为触摸对象可能已经从另一个 View 转发到一个 View , 此方法执行任何必要的触摸位置到指定 View 坐标系的转换。

示例

您有一个名为 parentView frame (0, 0, 320, 480) 的 View ,即整个屏幕。这有一个名为 childView frame (50, 50, 100, 100) 的 subview 。

在 subview
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];

CGPoint touchLocation = [touch locationInView:self];

NSLog(@"Child touch point = (%f, %f).", touchLocation.x, touchLocation.y);

[self.nextResponder touchesBegan:touches withEvent:event];
}

在父 View
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];

CGPoint touchLocation = [touch locationInView:self];

NSLog(@"Parent touch point = (%f, %f).", touchLocation.x, touchLocation.y);
}

*现在...

用户在 subview 的正中心按下屏幕。

该程序的输出将是...
Child touch point = (50, 50). //i.e. this is the center of the child view relative to the **child view**.
Parent touch point = (150, 150). //i.e. this is the center of the child view relative to the **parent view**.

我根本没有进行任何转换。方法 locationInView 为您完成所有这些工作。我认为您正试图使其复杂化。

关于ios - 如何在传递给下一个响应者之前更改 UITouch 的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14141846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com