只用一个pan手势来代替UISwipegesture的各个方向:
-(void)pan:(UIPanGestureRecognizer*)sender
{
typedefNS_ENUM(NSUInteger,UIPanGestureRecognizerDirection){
UIPanGestureRecognizerDirectionUndefined,
UIPanGestureRecognizerDirectionUp,
UIPanGestureRecognizerDirectionDown,
UIPanGestureRecognizerDirectionLeft,
UIPanGestureRecognizerDirectionRight
};
staticUIPanGestureRecognizerDirectiondirection=UIPanGestureRecognizerDirectionUndefined;
switch(sender.state){
caseUIGestureRecognizerStateBegan:{
if(direction==UIPanGestureRecognizerDirectionUndefined){
CGPointvelocity=[sendervelocityInView:recognizer.view];
BOOLisVerticalGesture=fabs(velocity.y)>fabs(velocity.x);
if(isVerticalGesture){
if(velocity.y>0){
direction=UIPanGestureRecognizerDirectionDown;
}else{
direction=UIPanGestureRecognizerDirectionUp;
}
}
else{
if(velocity.x>0){
direction=UIPanGestureRecognizerDirectionRight;
}else{
direction=UIPanGestureRecognizerDirectionLeft;
}
}
}
break;
}
caseUIGestureRecognizerStateChanged:{
switch(direction){
caseUIPanGestureRecognizerDirectionUp:{
[selfhandleUpwardsGesture:sender];
break;
}
caseUIPanGestureRecognizerDirectionDown:{
[selfhandleDownwardsGesture:sender];
break;
}
caseUIPanGestureRecognizerDirectionLeft:{
[selfhandleLeftGesture:sender];
break;
}
caseUIPanGestureRecognizerDirectionRight:{
[selfhandleRightGesture:sender];
break;
}
default:{
break;
}
}
break;
}
caseUIGestureRecognizerStateEnded:{
direction=UIPanGestureRecognizerDirectionUndefined;
break;
}
default:
break;
}
}