這是scrollView左右滑動與側滑手勢沖突解決方法。
其實就是判斷手勢是否繼續向下傳遞。
1.當然要自定義一個UIScrollView,在CustomScrollView的手勢代理方法里實現自己的邏輯
#import "CustomScrollView.h"
@interface CustomScrollView()
@property(nonatomic,assign)BOOL isMoveRight;
@end
@implementation CustomScrollView
//1返回值是返回是否生效。此方法在gesture recognizer視圖轉出UIGestureRecognizerStatePossible狀態時調用,如果返回NO,則轉換到UIGestureRecognizerStateFailed;如果返回YES,則繼續識別觸摸序列
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
//滑動速度
CGPoint velocity = [(UIPanGestureRecognizer *)gestureRecognizer velocityInView:self];
CGPoint location = [gestureRecognizer locationInView:self];
NSLog(@"velocity.x:%f----location.x:%d",velocity.x,(int)location.x%(int)[UIScreen mainScreen].bounds.size.width);
//x方向速度>0為右滑動,反之為左滑動
if (velocity.x > 0) {
self.isMoveRight = YES;
}else{
self.isMoveRight = NO;
}
return YES;
}
//2
//此方法返回YES時,手勢事件會一直往下傳遞(允許多手勢觸發),不論當前層次是否對該事件進行響應。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
UIScrollView * scrollvire = (UIScrollView *)gestureRecognizer.view;
//根據contentOffset.x 與 滑動方向 來判斷手勢是否向下傳遞
if (scrollvire.contentOffset.x == 0 && self.isMoveRight == YES) {
return YES;
}
return NO;
}