当视图移动到超级视图之外时,touchesBegan停止工作

hka*_*atz 5 iphone touch

我正在使用相对于其超视图在屏幕上[aSubview touchesBegan]移动aSubview的位置.它的超级视图并不比子视图本身大.这很简单,如下面的代码段所示:

    UITouch* touch = [touches anyObject];
    CGPoint touchPoint = [touch locationInView:[self superview]];
    self.center = touchPoint;
Run Code Online (Sandbox Code Playgroud)

然而,一旦a aSubview被移动,只要它的任何部分超出其超视图的范围,该部分中的触摸就不再注册.换句话说,touchesBegan不再开火.aSubview无论在哪里移动与其超级视图相关,我都希望能够进行注册.

有什么想法吗?
霍华德

Luk*_*asz 5

mcpunky的答案几乎是好的,除了你不能使pointInside函数总是返回YES.这样,视图将拦截所有触摸.

相反,需要做更多的检查:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{

    return CGRectContainsPoint(self.subviewOutsideMe.frame, point) || CGRectContainsPoint(self.bounds, point);

}
Run Code Online (Sandbox Code Playgroud)


Cis*_*one 0

我不确定这是否是正确的方法,但这肯定是一种方法。

即使在您的父对象中,也可以监听touchesBegan。如果您收到一个事件,请通过自己调用其 TouchsBegan 将其传递到子视图。