目前在弄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;
}