Rav*_*ale 13 iphone view uigesturerecognizer ios
在一个viewController我有一个mainView,在该视图上我有另一个视图(这被称为sidePanel视图有帧0,0,86,420.)我添加了tapGesture.现在我想只为sidePanelView以外的mainView启用手势识别.见下图
我想为sidePanelView禁用tapGesture并启用除此之外的区域.怎么做.(有一点我想说sidePanelView以外的区域是sidePanelView的parentView).
Rob*_*Rob 25
你应该接受巴拉特的答案,因为这是正确的.我只想说明你是如何做到的:
将视图控制器定义为符合UIGestureRecognizerDelegate,例如:
@interface ViewController () <UIGestureRecognizerDelegate>
// the rest of your interface
@end
Run Code Online (Sandbox Code Playgroud)确保delegate为手势设置:
UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleMainTap:)];
gesture.delegate = self;
[self.view addGestureRecognizer:gesture];
Run Code Online (Sandbox Code Playgroud)然后检查以查看相关视图是否触摸:
- (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
if (CGRectContainsPoint(self.menuView.bounds, [touch locationInView:self.menuView]))
return NO;
return YES;
}
Run Code Online (Sandbox Code Playgroud)Bha*_*ati 14
您可以在UIGestureRecognizerDelegate中使用gestureRecognizer:shouldReceiveTouch:方法查看触摸发生的位置,并决定是否要响应手势.如果触摸距离视图边缘太近(要禁用的位置),则返回NO,否则返回YES.或者只需检查touch.view以查看UIImageView上是否发生了触摸.
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldReceiveTouch:(UITouch *)touch;
Run Code Online (Sandbox Code Playgroud)
Swift 3版本:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
if theView.bounds.contains(touch.location(in: theView)) {
return false
}
return true
}
Run Code Online (Sandbox Code Playgroud)
遇到了类似的问题;最终使用了@Rob 的答案。这是一个 Swift 版本:
extension ViewController: UIGestureRecognizerDelegate {
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
return !CGRectContainsPoint(menuView.bounds, touch.locationInView(menuView))
}
}
Run Code Online (Sandbox Code Playgroud)
我已经做到了这一点,在帮助下
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
我已经检查了触摸点位置并根据触摸位置我做了这样的工作
if(points.x>86)
{//hide the side panel
}
Run Code Online (Sandbox Code Playgroud)
它识别手势并与事件同步。
| 归档时间: |
|
| 查看次数: |
15706 次 |
| 最近记录: |