CGXVerticalMenuCustomCollectionView.m 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. //
  2. // CGXVerticalMenuCustomCollectionView.m
  3. // CGXVerticalMenuView-OC
  4. //
  5. // Created by CGX on 2018/05/01.
  6. // Copyright © 2019 CGX. All rights reserved.
  7. //
  8. #import "CGXVerticalMenuCustomCollectionView.h"
  9. @implementation CGXVerticalMenuCustomCollectionView
  10. - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
  11. if ([self.gestureDelegate respondsToSelector:@selector(gx_pageHomeCollectionView:gestureRecognizerShouldBegin:)]) {
  12. return [self.gestureDelegate gx_pageHomeCollectionView:self gestureRecognizerShouldBegin:gestureRecognizer];
  13. }else {
  14. if (self.isNestEnabled) {
  15. if ([gestureRecognizer isMemberOfClass:NSClassFromString(@"UIScrollViewPanGestureRecognizer")]) {
  16. CGFloat velocityX = [(UIPanGestureRecognizer *)gestureRecognizer velocityInView:gestureRecognizer.view].x;
  17. // x大于0就是右滑
  18. if (velocityX > 0) {
  19. if (self.contentOffset.x == 0) {
  20. return NO;
  21. }
  22. }else if (velocityX < 0) { // x小于0是往左滑
  23. if (self.contentOffset.x + self.bounds.size.width == self.contentSize.width) {
  24. return NO;
  25. }
  26. }
  27. }
  28. }
  29. }
  30. if ([self panBack:gestureRecognizer]) return NO;
  31. return YES;
  32. }
  33. - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
  34. if ([self.gestureDelegate respondsToSelector:@selector(gx_pageHomeCollectionView:gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:)]) {
  35. return [self.gestureDelegate gx_pageHomeCollectionView:self gestureRecognizer:gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:otherGestureRecognizer];
  36. }
  37. if ([self panBack:gestureRecognizer]) return YES;
  38. return NO;
  39. }
  40. - (BOOL)panBack:(UIGestureRecognizer *)gestureRecognizer {
  41. if (gestureRecognizer == self.panGestureRecognizer) {
  42. CGPoint point = [self.panGestureRecognizer translationInView:self];
  43. UIGestureRecognizerState state = gestureRecognizer.state;
  44. // 设置手势滑动的位置距屏幕左边的区域
  45. CGFloat locationDistance = [UIScreen mainScreen].bounds.size.width;
  46. if (state == UIGestureRecognizerStateBegan || state == UIGestureRecognizerStatePossible) {
  47. CGPoint location = [gestureRecognizer locationInView:self];
  48. if (point.x > 0 && location.x < locationDistance && self.contentOffset.x <= 0) {
  49. return YES;
  50. }
  51. }
  52. }
  53. return NO;
  54. }
  55. /*
  56. // Only override drawRect: if you perform custom drawing.
  57. // An empty implementation adversely affects performance during animation.
  58. - (void)drawRect:(CGRect)rect {
  59. // Drawing code
  60. }
  61. */
  62. @end