最近作项目,又遇到了UIPanGestureRecognizer手势的传递问题,大致相当于网易新闻的侧边栏以及UIScrollView的互相传递的问题。觉得还是把解决办法写下来吧,第一次写技术博客,嘿嘿,人懒不喜欢写,这不好,要多写才是对的。好了,开始。
1、发现的问题
当主View是侧边栏的contentView,contentVIew又有一个UIScrollView的subVIew的时候,这时,scrollView会先获取UIPanGestureRecognizer,并对它进行处理。但是,我们希望,在scrollView的到达左右边界的时候,将滑动手势传递给contentView,从而进行侧边栏视图的展现。这时就需要将scrollVIew的UIPanGestureRecognizer传递给ContentVIew的手势处理方法。
2、解决办法
第一,判断边界,使用scrollViewDidScroll方法,通过crollView.contentOffset.x来判断是否到达边界。
第二,在到达边界后,将scrollView.panGestureRecognizer传递进contentView的手势处理方法中。
[self handlePanGesture:scrollView.panGestureRecognizer];
就这两步,当然,如果你的手势处理需要判断手势的state的时候,你就需要将scrollView.panGestureRecognizer的各个状态传递过去。
scrollView的panGestureRecognizer的state,是readonly属性,所以需要在scrollView的代理方法中去传递。
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;这个方法传递的state是:UIGestureRecognizerStateBegan。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;这个方法传递的state是:UIGestureRecognizerStateChanged。
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;这个方法传递的state是:UIGestureRecognizerStateEnded。
当然,这并不全面,其他代理方法没有尝试,你可以NSLog打印出scrollView.panGestureRecognizer的state,即可明了。
第一次写,渣排版,下次改进吧。签到打卡,2014年5月27日。