UIPanGestureRecognizer手势影响UISlider拖动的问题及解决办法
2012-03-30 09:04
393 查看
最近在使用UISlider控件控制音频播放进度时,遇到一个问题,即:UISlider所在的UIView上已经添加了UIPanGestureRecognizer类型手势,用来处理向右拖动整个View时取消显示,但这样一来,拖动UISlider就变成了响应手势,而无法正常使用UISlider。
经过一番查找资料和尝试,问题得到解决,方法如下:
给UIPanGestureRecognizer添加代理(UIGestureRecognizerDelegate),UIGestureRecognizerDelegate中有一个方法:
-(BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldReceiveTouch:(UITouch*)touch;
在进入手势识别事件之前,先进入该方法,对那些不需要响应手势事件的事件(如拖动UISlider),可以通过返回一个NO型布尔值不响应手势识别;而对于需要响应手势识别的情况,只需要返回一个YES就可以。
下面举例说明:
首先添加手势识别,并给手势识别指定代理
⋯⋯
UIPanGestureRecognizer* panRecognizer = [[UIPanGestureRecognizer
alloc] initWithTarget:self
action:@selector(handlePanGesture:)];
[panRecognizer
setMaximumNumberOfTouches:1];
[panRecognizer
setDelaysTouchesBegan:TRUE];
[panRecognizer
setDelaysTouchesEnded:TRUE];
[panRecognizer
setCancelsTouchesInView:TRUE];
//为手势识别器设置代理
panRecognizer.delegate =
self;
[self.view
addGestureRecognizer:panRecognizer];
[panRecognizer
release];
⋯⋯
然后,实现UIGestureRecognizerDelegate的方法:
// 当拖动UISlider时会被误认为是手势,所以在这个判断一下
-(BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldReceiveTouch:(UITouch*)touch {
if([touch.view
isKindOfClass:[UISlider
class]])
return
NO;
else
return
YES;
}
经过一番查找资料和尝试,问题得到解决,方法如下:
给UIPanGestureRecognizer添加代理(UIGestureRecognizerDelegate),UIGestureRecognizerDelegate中有一个方法:
-(BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldReceiveTouch:(UITouch*)touch;
在进入手势识别事件之前,先进入该方法,对那些不需要响应手势事件的事件(如拖动UISlider),可以通过返回一个NO型布尔值不响应手势识别;而对于需要响应手势识别的情况,只需要返回一个YES就可以。
下面举例说明:
首先添加手势识别,并给手势识别指定代理
⋯⋯
UIPanGestureRecognizer* panRecognizer = [[UIPanGestureRecognizer
alloc] initWithTarget:self
action:@selector(handlePanGesture:)];
[panRecognizer
setMaximumNumberOfTouches:1];
[panRecognizer
setDelaysTouchesBegan:TRUE];
[panRecognizer
setDelaysTouchesEnded:TRUE];
[panRecognizer
setCancelsTouchesInView:TRUE];
//为手势识别器设置代理
panRecognizer.delegate =
self;
[self.view
addGestureRecognizer:panRecognizer];
[panRecognizer
release];
⋯⋯
然后,实现UIGestureRecognizerDelegate的方法:
// 当拖动UISlider时会被误认为是手势,所以在这个判断一下
-(BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldReceiveTouch:(UITouch*)touch {
if([touch.view
isKindOfClass:[UISlider
class]])
return
NO;
else
return
YES;
}
相关文章推荐
- UIPanGestureRecognizer手势影响UISlider拖动的问题及解决办法
- UIPanGestureRecognizer手势影响UISlider拖动的问题及解决办法 (转)
- UIPanGestureRecognizer手势影响UISlider拖动的问题及解决办法
- UIPanGestureRecognizer手势影响UISlider拖动的问题及解决办法
- 带有ListView的界面无法通过手势左右滑动切换界面问题解决办法
- jquery easyui中的dialog拖动超出浏览器问题解决办法
- UISlider无法拖动进度条的问题解决
- UISlider的touchUpInSide方法在界面有其他手势的情况下小范围拖动无效问题
- 关于UISlider的拖动手势不灵敏的解决方法
- 关于iOS7之后自定义leftnavigationitem后手势无法响应问题的解决办法
- 带有ListView的界面无法通过手势左右滑动切换界面问题解决办法
- iOS 手势冲突问题汇总(及解决办法)
- excel拖动滑动滚动条卡死问题解决办法
- ubuntu 10.10 网络连接消失问题解决办法
- ViewPager中嵌套ViewFlipper手势冲突的解决办法
- UEditor 使用问题及解决办法(不定期更新)
- 关于WInform中listbox鼠标拖动上下排序item的问题解决
- 解决response.write()css失效的问题办法
- 转载+整理:在部署时使用Excel .NET运行库导出Excel遇到问题及解决办法
- VS2013遇到“未能找到元数据文件”问题解决办法