WMScrollView.m 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. //
  2. // WMScrollView.m
  3. // WMPageController
  4. //
  5. // Created by lh on 15/11/21.
  6. // Copyright (c) 2015年 yq. All rights reserved.
  7. //
  8. #import "WMScrollView.h"
  9. /// 这里做了默认的一些手势控制,无法做到顾全所有的手势
  10. /// 若出现手势冲突或者不响应,需要自行对视图的 GestureRecognizerDelegate 进行实现
  11. @implementation WMScrollView
  12. #pragma mark - <UIGestureRecognizerDelegate>
  13. - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
  14. // iOS横向滚动的scrollView和系统pop手势返回冲突的解决办法: http://blog.csdn.net/hjaycee/article/details/49279951
  15. // 兼容系统pop手势 / FDFullscreenPopGesture / 如有自定义手势,需自行对 Gesture 做判断
  16. if ([otherGestureRecognizer.view isKindOfClass:NSClassFromString(@"UILayoutContainerView")]) {
  17. if (otherGestureRecognizer.state == UIGestureRecognizerStateBegan && self.contentOffset.x == 0) {
  18. return YES;
  19. }
  20. }
  21. // ReSideMenu 及其他一些手势的开启,需要在这自行此有些。目前还没完全兼容好,会引起一个小问题
  22. if (self.otherGestureRecognizerSimultaneously) {
  23. // 再判断系统手势的state是began还是fail,同时判断scrollView的位置是不是正好在最左边
  24. if (otherGestureRecognizer.state == UIGestureRecognizerStateBegan && self.contentOffset.x == 0) {
  25. return YES;
  26. }
  27. }
  28. return NO;
  29. }
  30. - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRequireFailureOfGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
  31. //MARK: UITableViewCell 自定义手势需要自行定义
  32. if ([otherGestureRecognizer.view isKindOfClass:NSClassFromString(@"UITableViewWrapperView")] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
  33. return YES;
  34. }
  35. return NO;
  36. }
  37. @end