你需要在父视图中处理触摸事件,而不是在要切换的视图中处理。这样可以在切换视图时保留触摸事件。但是,在这种情况下,你需要自己测试触摸是否发生在要切换的特定子视图中。有很多方法可以实现这一点,以下是一些方法供你参考:
将矩形/点转换为另一个视图:
[view convertRect:rect toView:subview]
[view convertPoint:point toView:subview]
以下是一些测试点是否位于视图中的方法:
[subView hitTest:point withEvent:nil];
CGRectContainsPoint(subview.frame, point); //No point conversion needed
[subView pointInside:point withEvent:nil];
一般来说,最好使用UIGestureRecognizers。例如,如果您正在使用UIPanGestureRecognizer,则应创建一个手势识别器可以调用的方法,在该方法中执行您的工作。例如:
- (void) viewPanned:(UIPanGestureRecognizer *)pan{
if (pan.state == UIGestureRecognizerStateBegan){
CGRect rect = subView.frame;
newView = [[UIView alloc] initWithFrame:rect];
[subView removeFromSuperview];
[self addSubview:newView];
} else if (pan.state == UIGestureRecognizerStateChanged){
CGPoint point = [pan locationInView:self];
newView.center = point;
} else {
}
}
然后您初始化识别器,将其分配给目标(通常为self),并添加它:
[self addGestureRecognizer:[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(viewPanned:)]];
现在自身(即管理其子视图的父视图)将响应平移手势。