Mmdrawercontroller is a very useful third-party class for solving drawer effects, but sometimes when we need to use gestures to do other things in the central view controller, there is a gesture conflict, which results in a running effect that doesn't fit our imagination. So the question is, how do we solve the problem of conflict?
Here is my personal summary of the use process:
My needs:
1, there is a left drawer and center view controller, from the Center view Controller right slide can open the left drawer.
2. Tableviewcell in the Center view controller can be removed by swiping gestures
The problem lies in:
1, due to the deletion of the cell's left slip gesture and mmdrawercontroller open right drawer of the left slip gesture conflict (although I did not set the right drawer), causing the left slide to delete the cell's method (of course, the system method) sometimes respond sometimes not corresponding.
Solution Purpose:
1. Remove the cell from the gesture conflict
2, right slide can open the left drawer
Thinking Process:
1, this drawer effect is similar to the mobile phone QQ, when we want to open the mobile phone QQ drawer by swiping gesture to the left hand side of the box to swipe to the right, but from the right to the left without creating the effect of open drawer.
However, Mmdrawercontroller can open the left drawer by default from anywhere in the Center View Controller (note the difference between the two)
2, Mmdrawercontroller should have a method to identify the gesture, as long as the problem can be found to solve this method.
Resolution process:
1, in the Mmdrawercontroller of the various files through Command+f search Gesturerecognizer, and finally found in Mmdrawercontroller this class
-(Mmopendrawergesturemode) Possibleopengesturemodesforgesturerecognizer: (uigesturerecognizer*) GestureRecognizer Withtouch: (uitouch*) touch; this method
2, in this method found Spointcontainedwithincenterviewcontentrect: This judgment condition, hold command Click to jump to its location, here to find the problem. The solution is as follows:
MMDRAWERCONTROLLER.M in 1460 rows
Resolve gesture Conflicts
-(BOOL) Ispointcontainedwithincenterviewcontentrect: (cgpoint) point{
CGRect centerviewcontentrect = self.centerContainerView.frame; The original meaning is to place the gesture recognition of the trigger drawer on the entire screen.
CGRect centerviewcontentrect = CGRectMake (0, 0, self.centerContainerView.frame.size.height); The modified meaning is to put the trigger open drawer gesture recognition on the left side of the screen width 50, high for the screen height of the rect
Centerviewcontentrect = Cgrectintersection (centerviewcontentrect,self.childcontrollercontainerview.bounds);
Return (Cgrectcontainspoint (Centerviewcontentrect, point) &&
[self ispointcontainedwithinnavigationrect:point] = = NO);
}
Since there is no test on the right drawer, the code comment is also understood by the individual, which may be inappropriate, but it should be a breeze to resolve the conflict between the left-and center-drawer gestures and the central View sub-view controller gesture in the above way.
iOS Development Mmdrawercontroller solution for the left and right drawer open gesture conflict with central view sub-view controller gestures