最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS中仿QQ側(cè)滑菜單功能

 更新時間:2017年07月20日 09:58:33   作者:shihubok  
這篇文章主要介紹了iOS中仿QQ側(cè)滑菜單功能,在實現(xiàn)此功能之前,需要先了解UITabBarController的層級結(jié)構(gòu),具體實現(xiàn)思路大家可以參考下本文

UITabBarController做QQ側(cè)滑菜單效果:

首先要了解UITabBarController的層級結(jié)構(gòu):

UITabBarController加載的其它UIViewController的View都是被添加在UITransitionView上(這是一個私有API),UITransitionView在self.view的0層,UITabBar在的第一層。

所以我的思路是這樣的:

UITransitionView與UITabBar轉(zhuǎn)移到一個新的View1上去,作為滑動的部分;

在View1與self.view之間再添加一個View2,作為菜單的容器;

給View1添加相應(yīng)的手勢響應(yīng);

代碼:

#import <UIKit/UIKit.h>
@protocol SlideTab_VC_TCVDelegate <NSObject>
@optional
-(void)didOpenMenu:(UIView*)menu;
-(void)didCloseMenu:(UIView*)menu;
@end
@interface SlideTab_VC : UITabBarController
@property(strong, nonatomic)UIView *mMenuV;
@property(weak, nonatomic)id <SlideTab_VC_TCVDelegate> mDelegate;
-(void)openMenu;
-(void)closeMenu;
@end
#import "SlideTab_VC.h"
#define DEVICE_W [UIScreen mainScreen].bounds.size.width
@interface SlideTab_VC ()<UITabBarDelegate>{
 CGFloat _centerMaxX;
}
@property(strong, nonatomic)UIView *mTransitionView;
@property(strong, nonatomic)UITapGestureRecognizer *mTapGester;
@property(assign, nonatomic)BOOL mMenuIsOpen;
@property(strong, nonatomic)UITabBar *mTabBar;
@end
@implementation SlideTab_VC
- (void)viewDidLoad {
 [super viewDidLoad];
 // Do any additional setup after loading the view.
 self.view.backgroundColor = [UIColor purpleColor];
 _mMenuIsOpen = NO;
 _centerMaxX = DEVICE_W*3/2-80.0f;
 [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.15f animations:^{
  self.mTransitionView.center = center;
  if (_mDelegate != nil&& [_mDelegate respondsToSelector:@selector(didOpenMenu:)]) {
  [_mDelegate didOpenMenu:_mMenuV];
 }
 }];
 [self mTransitionSubViewsEnable:NO];
}
#pragma mark 關(guān)閉菜單
-(void)closeMenu{
 CGPoint center = self.mTransitionView.center;
 center.x = DEVICE_W/2;
 [UIView animateWithDuration:0.15f animations:^{
  self.mTransitionView.center = center;
 } completion:^(BOOL finished) {
  [self mTransitionSubViewsEnable:YES];
  if (_mDelegate != nil&& [_mDelegate respondsToSelector:@selector(didCloseMenu:)]) {
  [_mDelegate didCloseMenu:_mMenuV];
 }
 }];
}
#pragma mark Transition用戶交互使能
-(void)mTransitionSubViewsEnable:(BOOL)enable{
 for (UIView *tmp in self.mTransitionView.subviews) {
  tmp.userInteractionEnabled = enable;
 }
 if (enable) {
  [self.mTransitionView removeGestureRecognizer:_mTapGester];
 }else{
  [self.mTransitionView addGestureRecognizer:_mTapGester];
 }
}
#pragma mark 配置mTransitionView
-(void)initMTransitionView{
 for (UIView *tmp in self.view.subviews) {
  [tmp removeFromSuperview];
  [self.mTransitionView addSubview:tmp];
 }
 [self.view addSubview:self.mTransitionView];
}
#pragma mark 拖動手勢動作
-(void)panAction:(UIPanGestureRecognizer*)pan{
 CGPoint location = [pan translationInView:pan.view.superview];
 CGPoint center = self.mTransitionView.center;
 if (pan.state==UIGestureRecognizerStateEnded) {
  if (center.x<_centerMaxX*0.5+DEVICE_W*0.25){
   [self closeMenu];
  }else{
   [self openMenu];
  }
 }else if(pan.state==UIGestureRecognizerStateChanged){
  if (location.x<0) {//向左滑
   center.x = center.x+location.x<=DEVICE_W/2? DEVICE_W/2 : center.x+location.x;
  }else{
   center.x = center.x+location.x>=_centerMaxX? _centerMaxX : center.x+location.x;
  }
  self.mTransitionView.center = center;
  [pan setTranslation:CGPointMake(0, 0) inView:pan.view.superview];
 }
}
#pragma mark 添加手勢
-(void)addGestureForMTransitionView{
 UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panAction:)];
 [_mTransitionView addGestureRecognizer:pan];
 _mTapGester = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction)];
}
#pragma mark--懶加載
-(UIView *)mTransitionView{
 if (_mTransitionView==nil) {
  _mTransitionView = [[UIView alloc]initWithFrame:self.view.bounds];
 }
 return _mTransitionView;
}
-(void)tapAction{
 CGFloat x = _mTransitionView.center.x;
 if (x>=_centerMaxX) {
  [self closeMenu];
 }
}
@end

總結(jié)

以上所述是小編給大家介紹的iOS中仿QQ側(cè)滑菜單功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • ios設(shè)備使用iframe寬度超出屏幕的解決方法

    ios設(shè)備使用iframe寬度超出屏幕的解決方法

    這篇文章主要給大家介紹了關(guān)于ios設(shè)備使用iframe寬度超出屏幕的解決方法,文中通過示例代碼介紹的非常詳細(xì),對各位ios開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 淺談WKWebView 在64位設(shè)備上的白屏問題

    淺談WKWebView 在64位設(shè)備上的白屏問題

    下面小編就為大家?guī)硪黄獪\談WKWebView 在64位設(shè)備上的白屏問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • 仿iOS圖標(biāo)抖動

    仿iOS圖標(biāo)抖動

    最近閑來無聊,研究了一下IPhone桌面圖標(biāo)的抖動,網(wǎng)上有一個類似的事例,但是我看來效果實在不佳,自己也來寫一個玩玩,有需要的小伙伴可以參考下。
    2015-05-05
  • iOS中延時執(zhí)行的幾種方式比較及匯總

    iOS中延時執(zhí)行的幾種方式比較及匯總

    這篇文章主要給大家介紹了關(guān)于iOS中延時執(zhí)行的幾種方式比較及匯總,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-02-02
  • IOS collectionViewCell防止復(fù)用的兩種方法

    IOS collectionViewCell防止復(fù)用的兩種方法

    這篇文章主要介紹了IOS collectionViewCell防止復(fù)用的兩種方法的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • IOS中用正則表達式判斷輸入的內(nèi)容為8-16位且同時包含數(shù)字和字母

    IOS中用正則表達式判斷輸入的內(nèi)容為8-16位且同時包含數(shù)字和字母

    這篇文章主要介紹了IOS中用正則表達式判斷輸入的內(nèi)容為8-16位且同時包含數(shù)字和字母,需要的朋友可以參考下
    2017-06-06
  • Terminal該如何自定義提示詳解

    Terminal該如何自定義提示詳解

    這篇文章主要給大家介紹了關(guān)于Terminal如何自定義提示的相關(guān)資料,文中通過圖文以及示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06
  • iOS中UIScrollerView的用法及基于AotoLayout的控件懸停

    iOS中UIScrollerView的用法及基于AotoLayout的控件懸停

    這篇文章主要介紹了iOS中UIScrollerView的用法及基于AotoLayout的控件懸停,文中對于UIScrollerView的方法及屬性介紹地非常詳細(xì),十分推薦,示例代碼為Objective-C,需要的朋友可以參考下
    2016-03-03
  • 在uiview 的tableView中點擊cell進入跳轉(zhuǎn)到另一個界面的實現(xiàn)方法

    在uiview 的tableView中點擊cell進入跳轉(zhuǎn)到另一個界面的實現(xiàn)方法

    這篇文章主要介紹了在uiview 的tableView中點擊cell進入跳轉(zhuǎn)到另一個界面的實現(xiàn)方法,首先重寫uiviewcontrol方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-10-10
  • 解決ios微信下vue項目組件切換并自動播放音頻問題

    解決ios微信下vue項目組件切換并自動播放音頻問題

    最近在做一個英語答題項目,項目需求是通過答題取的成績 , 答題的題型是分為,聽音選圖,看圖選詞和填空題.下面小編給大家?guī)砹薸os微信下vue項目組件切換并自動播放音頻的解決方案,需要的朋友參考下吧
    2018-01-01

最新評論

阿克苏市| 余姚市| 富川| 新干县| 东至县| 云梦县| 千阳县| 太谷县| 葫芦岛市| 闽侯县| 许昌市| 赞皇县| 平和县| 博兴县| 河西区| 东乡| 靖州| 读书| 台中市| 花莲县| 石泉县| 三亚市| 拜城县| 仁布县| 桑植县| 大方县| 济南市| 长宁区| 图片| 彰化县| 萨迦县| 济宁市| 四子王旗| 永登县| 邵武市| 合作市| 武鸣县| 青岛市| 叶城县| 新昌县| 云阳县|