父view中添加手势子view不响应的问题解决

// 父类 view
   
UIImageView *back = [[ UIImageView alloc ] initWithFrame : CGRectMake ( 0 , 0 , kScreenWidth , kScreenHeight )];
    back.
image = [ UIImage imageNamed : @"Default-568h@2x" ];
    back.
userInteractionEnabled = YES ;
    [
self . view addSubview :back];
   
   
// 父类 view 中的 imageView
   
imageView = [[ UIImageView alloc ] initWithFrame : CGRectMake ( 100 , 100 , 100 , 100 )];
   
imageView . image = [ UIImage imageNamed : @"Default-568h@2x" ];
   
imageView . userInteractionEnabled = YES ;
   
   
// 父类 view 中的 label
   
label = [[ UILabel alloc ] initWithFrame : CGRectMake ( 100 , 240 , 100 , 100 )];
   
label . text = @"label" ;
   
label . backgroundColor = [ UIColor grayColor ];
   
// 此属性必须打开 , 不然 UITouch 捕获 Label
   
label . userInteractionEnabled = YES ;
   
   
// 父类 view 中的 button
   
button = [ UIButton buttonWithType : UIButtonTypeCustom ];
    [
button setTitle : @"button" forState : UIControlStateNormal ];
   
button . frame = CGRectMake ( 100 , 350 , 100 , 100 );
   
button . backgroundColor = [ UIColor purpleColor ];
    [
button addTarget : self action : @selector (btn) forControlEvents : UIControlEventTouchUpInside ];

   
   
UITapGestureRecognizer *tap = [[ UITapGestureRecognizer alloc ] initWithTarget : self action : @selector (tap:)];
    tap.
delegate = self ;

    [back
addGestureRecognizer :tap];
    [back
addSubview : imageView ];
    [back
addSubview : label ];
    [back
addSubview : button ];
}
- (
void )btn
{
   
NSLog ( @"button" );
}
- ( BOOL )gestureRecognizer:( UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:( UITouch *)touch
{
   
// 取消 label imageview 响应手势
   
if ([touch. view isKindOfClass :[ UILabel class ]] || touch. view == imageView )
    {
       
return NO ;
    }
   
return YES ;

}
- (
void )tap:( UITapGestureRecognizer *)tap
{
   
NSLog ( @"tap.view = %@" ,tap. view );
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Android的View实现手势缩放,可以使用GestureDetector和ScaleGestureDetector这两个类。下面是一个简单的例: 1. 首先,在你的View创建一个GestureDetector和ScaleGestureDetector对象: ``` private GestureDetector mGestureDetector; private ScaleGestureDetector mScaleGestureDetector; ``` 2. 在View的构造函数初始化它们: ``` public MyView(Context context) { super(context); mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener()); mScaleGestureDetector = new ScaleGestureDetector(context, new ScaleGestureDetector.SimpleOnScaleGestureListener()); } ``` 3. 在View的onTouchEvent()方法处理手势事件: ``` @Override public boolean onTouchEvent(MotionEvent event) { mGestureDetector.onTouchEvent(event); mScaleGestureDetector.onTouchEvent(event); return true; } ``` 4. 然后,你需要实现GestureDetector.SimpleOnGestureListener()和ScaleGestureDetector.SimpleOnScaleGestureListener()的方法来响应手势事件: ``` private class MyGestureListener extends GestureDetector.SimpleOnGestureListener { @Override public boolean onDown(MotionEvent event) { return true; } @Override public boolean onDoubleTap(MotionEvent event) { // 处理双击事件 return true; } } private class MyScaleGestureListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { @Override public boolean onScale(ScaleGestureDetector detector) { // 处理缩放事件 float scaleFactor = detector.getScaleFactor(); // 在这里对View进行缩放处理 return true; } } ``` 5. 最后,在View的构造函数将它们绑定在一起: ``` mGestureDetector.setOnDoubleTapListener(new MyGestureListener()); mScaleGestureDetector.setOnScaleGestureListener(new MyScaleGestureListener()); ``` 这样,你就可以在View实现手势缩放了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值