iOS中如何仿QQ实现侧滑菜单功能

  介绍

这篇文章给大家分享的是有关iOS中如何仿QQ实现侧滑菜单功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

<强> UITabBarController做QQ侧滑菜单效果:

首先要了解UITabBarController的层级结构:

 iOS中如何仿QQ实现侧滑菜单功能

UITabBarController加载的其它的ui视图都是被添加在UITransitionView上(这是一个私有API), UITransitionView在self。View的0层,UITabBar在的第一层。

<强>所以我的思路是这样的:

UITransitionView与UITabBar转移到一个新的View1上去,作为滑动的部分;

在View1与自我。观点之间再添加一个View2,作为菜单的容器;

给View1添加相应的手势响应;

 iOS中如何仿QQ实现侧滑菜单功能

<强>代码:

# import  & lt; UIKit/UIKit.h>   @protocol  SlideTab_VC_TCVDelegate  & lt; NSObject>   @optional   - (void) didOpenMenu: (UIView *)菜单;   - (void) didCloseMenu: (UIView *)菜单;   @end   @interface  SlideTab_VC : UITabBarController   @ property(强,,原子)UIView  * mMenuV;   @ property(弱,,原子)id  & lt; SlideTab_VC_TCVDelegate>, mDelegate;   - (void) openMenu;   - (void) closeMenu;   @end   # import “SlideTab_VC.h"   # define  DEVICE_W  UIScreen  mainScreen .bounds.size.width   @interface  SlideTab_VC  () & lt; UITabBarDelegate> {   ,CGFloat  _centerMaxX;   }   @ property(强,,原子)UIView  * mTransitionView;   @ property(强,,原子)UITapGestureRecognizer  * mTapGester;   @ property(分配,原子)BOOL  mMenuIsOpen;   @ property(强,,原子)UITabBar  * mTabBar;   @end   @implementation  SlideTab_VC   安康;(空白)viewDidLoad  {   ,[super  viewDidLoad];   ,//Do  any  additional  setup  after  loading 从而视图。=,self.view.backgroundColor  [UIColor  purpleColor];=,_mMenuIsOpen 没有;=,,_centerMaxX  DEVICE_W * 3/2 - 80.0 f;   ,[self  initMTransitionView];   ,[self  addGestureForMTransitionView];   }   # pragma  mark 菜单懒加载   - (void) setMMenuV:(UIView  *) mMenuV {   ,if  (mMenuV !=nil), {   时间=_mMenuV 才能;mMenuV;   (才能self.view  insertSubview: _mMenuV  atIndex: 0];   ,}   }   # pragma  mark 打开菜单   - (void) openMenu {   ,CGPoint  center =, self.mTransitionView.center;=,,center.x  _centerMaxX;   ,(UIView  animateWithDuration: 0.15 f 动画:^ {   时间=self.mTransitionView.center 才能;中心;   if 才能;(_mDelegate  !=, nil&,, (_mDelegate  respondstoselectorismemberofclass: @ selector (didOpenMenu:))), {   (才能_mDelegate  didOpenMenu _mMenuV):;   ,}   ,}];   ,[self  mTransitionSubViewsEnable:没有);   }   # pragma  mark 关闭菜单   - (void) closeMenu {   ,CGPoint  center =, self.mTransitionView.center;=,,center.x  DEVICE_W/2;   ,(UIView  animateWithDuration: 0.15 f 动画:^ {   时间=self.mTransitionView.center 才能;中心;   完成,}:^ (BOOL 完成),{   ,,(self  mTransitionSubViewsEnable:是的);   if 才能;(_mDelegate  !=, nil&,, (_mDelegate  respondstoselectorismemberofclass: @ selector (didCloseMenu:))), {   (才能_mDelegate  didCloseMenu _mMenuV):;   ,}   ,}];   }   # pragma  mark 过渡用户交互使能   - (void) mTransitionSubViewsEnable: (BOOL)使{   ,for  (UIView  * tmp  self.mTransitionView.subviews拷贝),{   tmp.userInteractionEnabled =,才能启用;   ,}   ,if (使),{   (才能self.mTransitionView  removeGestureRecognizer _mTapGester):;   ,其他}{   (才能self.mTransitionView  addGestureRecognizer _mTapGester):;   ,}   }   # pragma  mark 配置mTransitionView   - (void) initMTransitionView {   ,for  (UIView  * tmp  self.view.subviews拷贝),{   (才能tmp  removeFromSuperview);   ,,(self.mTransitionView  addSubview: tmp);   ,}   ,[self.view  addSubview self.mTransitionView):;   }   # pragma  mark 拖动手势动作   - (void) panAction:潘(UIPanGestureRecognizer *) {   ,CGPoint 位置=,[pan  translationInView pan.view.superview):;   ,CGPoint  center =, self.mTransitionView.center;   ,if  (pan.state==UIGestureRecognizerStateEnded), {   if 才能;(center.x

iOS中如何仿QQ实现侧滑菜单功能