這是scrollView左右滑動(dòng)與側(cè)滑手勢(shì)沖突解決方法。
其實(shí)就是判斷手勢(shì)是否繼續(xù)向下傳遞。
1.當(dāng)然要自定義一個(gè)UIScrollView,在CustomScrollView的手勢(shì)代理方法里實(shí)現(xiàn)自己的邏輯
#import "CustomScrollView.h"
@interface CustomScrollView()
@property(nonatomic,assign)BOOL isMoveRight;
@end
@implementation CustomScrollView
//1返回值是返回是否生效。此方法在gesture recognizer視圖轉(zhuǎn)出UIGestureRecognizerStatePossible狀態(tài)時(shí)調(diào)用,如果返回NO,則轉(zhuǎn)換到UIGestureRecognizerStateFailed;如果返回YES,則繼續(xù)識(shí)別觸摸序列
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
//滑動(dòng)速度
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為右滑動(dòng),反之為左滑動(dòng)
if (velocity.x > 0) {
self.isMoveRight = YES;
}else{
self.isMoveRight = NO;
}
return YES;
}
//2
//此方法返回YES時(shí),手勢(shì)事件會(huì)一直往下傳遞(允許多手勢(shì)觸發(fā)),不論當(dāng)前層次是否對(duì)該事件進(jìn)行響應(yīng)。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
UIScrollView * scrollvire = (UIScrollView *)gestureRecognizer.view;
//根據(jù)contentOffset.x 與 滑動(dòng)方向 來(lái)判斷手勢(shì)是否向下傳遞
if (scrollvire.contentOffset.x == 0 && self.isMoveRight == YES) {
return YES;
}
return NO;
}