UIPanGestureRecognizer,touchesMoved;解决多层级 UIPanGestureRecognizer问题

目前在弄ios应用开发,遇到一个gesture的问题,刚解决,乘着热乎丢这里备份。方便自己和大家以后查看。


我的问题是,父窗口需要手势左右切换,子窗口里面有一个需要手势拖动的控件。

父窗口的是UIPanGestureRecognizer,子窗口的是用TouchMoved()的方式。这样父窗口的手势完全屏蔽子窗口。


解决办法很简单:

1、首先在控件里面重新申请一个UIPanGestureRecognizer,注册到一个空响应函数上。

这样做,就是用子窗口对事件响应的优先级来屏蔽父窗口。而且作用域只局限于这个控件的区域,手势在其它区域不会被屏蔽。


2、设置以下属性,因为我原先控件是TouchMoved方式实现,在UIPanGestureRecognizer active的时候会自动屏蔽原先的touchMoved机制。这条语句就避免这个问题。

panGesture.cancelsTouchesInView = FALSE;



so ,这样,简单的加个中间过程就把原先的手势优先级给传递回TouchMoved()了。



demo:

- (id)initWithFrame:(CGRect)frame {

    if((self = [super initWithFrame:frame])) {

        [self setDefaultValues];

        

        UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(paned:)];

        panGesture.cancelsTouchesInView = FALSE;

        [self addGestureRecognizer:panGesture];


    }

    return self;

}




- (void) paned:(UIPanGestureRecognizer *)tapGesture

{

    

    //it's None here! :

    //use to disable panGestrue in DynamicsDrawViewController;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值