介绍
这篇文章给大家分享的是有关iOS中如何仿QQ实现侧滑菜单功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
<强> UITabBarController做QQ侧滑菜单效果:强>
首先要了解UITabBarController的层级结构:
UITabBarController加载的其它的ui视图都是被添加在UITransitionView上(这是一个私有API), UITransitionView在self。View的0层,UITabBar在的第一层。
<强>所以我的思路是这样的:强>
UITransitionView与UITabBar转移到一个新的View1上去,作为滑动的部分;
在View1与自我。观点之间再添加一个View2,作为菜单的容器;
给View1添加相应的手势响应;
<强>代码:强>
# 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.xiOS中如何仿QQ实现侧滑菜单功能