兩行代碼實(shí)現(xiàn)【左右側(cè)滑】

導(dǎo)讀

左右側(cè)滑是App開發(fā)中非常常見的功能,目前大部分App都有實(shí)現(xiàn)這個(gè)功能.

為提高開發(fā)效率,筆者對(duì)左右側(cè)滑功能進(jìn)行了封裝.代碼簡(jiǎn)潔,思路清晰易懂,外界只需調(diào)用兩個(gè)接口,即可實(shí)現(xiàn)左右側(cè)滑功能!!!

源碼鏈接https://github.com/HelloYeah/HYSideViewController


簡(jiǎn)單介紹一下這個(gè)側(cè)滑的使用

1-> 側(cè)滑并設(shè)置側(cè)滑動(dòng)畫時(shí)間

  /** 側(cè)滑并設(shè)置側(cè)滑動(dòng)畫時(shí)間 */
- (void)sideAnimateDuration:(NSTimeInterval)duration SideDirection:(HYSideDirection)sideDirectionType;

2-> 設(shè)置側(cè)滑控制器,可只實(shí)現(xiàn)一側(cè),也可以都實(shí)現(xiàn)

  /** 設(shè)置左側(cè)的控制器 */
  - (void)setLeftSideVC:(UIViewController *)leftSideVC;
  /** 設(shè)置右側(cè)的控制器 */
  - (void)setRightSideVC:(UIViewController *)rightSideVC;

效果圖

  • 集成一側(cè)側(cè)滑


    1.gif
  • 同時(shí)集成左右側(cè)滑


    2.gif

實(shí)現(xiàn)思路及主要代碼詳解

思路簡(jiǎn)述

把將要側(cè)滑出來(lái)的View添加到[UIApplication sharedApplication].keyWindow上,并用一個(gè)控制器來(lái)對(duì)這個(gè)View進(jìn)行管理.如果是向右滑動(dòng),則添加到左側(cè).向右滑動(dòng)時(shí),將keyWindow上的所有子控件進(jìn)行向右平移.我們想要的側(cè)滑效果即可出來(lái)了.

主要代碼

1.外界通過(guò)調(diào)用setter方法,添加側(cè)滑控制器

- (void)setLeftSideVC:(UIViewController *)leftSideVC{
    
    _leftSideVC = leftSideVC;
    [[UIApplication sharedApplication].keyWindow addSubview:self.leftSideView];
    CGRect rect = self.leftSideView.bounds;
    CGFloat sideWidth = self.leftSideView.bounds.size.width;
    sideWidth = rect.size.width;
    self.leftSideView.frame = CGRectMake(- rect.size.width, 0, rect.size.width, [UIScreen mainScreen].bounds.size.height);
}

- (void)setRightSideVC:(UIViewController *)rightSideVC{
    
    _rightSideVC = rightSideVC;
    [[UIApplication sharedApplication].keyWindow addSubview:self.rightSideView];
    CGRect rect = self.rightSideView.bounds;
    CGFloat sideWidth = self.rightSideView.bounds.size.width;
    sideWidth = rect.size.width;
    self.rightSideView.frame = CGRectMake([UIScreen mainScreen].bounds.size.width , 0 , rect.size.width, [UIScreen mainScreen].bounds.size.height);
}

2.外界調(diào)用側(cè)滑接口,側(cè)滑并設(shè)置側(cè)滑動(dòng)畫時(shí)間.并相應(yīng)的調(diào)整狀態(tài)欄樣式.

- (void)sideAnimateDuration:(NSTimeInterval)duration SideDirection:(HYSideDirection)sideDirectionType{
    
        //修改狀態(tài)欄樣式
    if([UIApplication sharedApplication].statusBarStyle == UIStatusBarStyleDefault){
        [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
    }else{
        [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
    }
    if (self.isSide) {
        self.isSide = NO;
        [UIView animateWithDuration:duration animations:^{
            for (UIView * view in [UIApplication sharedApplication].keyWindow.subviews) {
                view.transform = CGAffineTransformIdentity;
            }
        }completion:^(BOOL finished) {

            [self hiddenSideView];
        }];
        return;
    }
    
    self.isSide = YES;
    if (sideDirectionType == HYSideDirectionLeft){
        self.rightSideView.hidden = NO;
    }else{
        self.leftSideView.hidden = NO;
    }
    CGFloat _sideWidth = (sideDirectionType == HYSideDirectionRight) ? self.leftSideView.frame.size.width : - self.rightSideView.frame.size.width;
    [UIView animateWithDuration:duration animations:^{
        [self sideDistance:_sideWidth];
    }];
}

3.核心的代碼是滑動(dòng)手勢(shì)的回調(diào)方法,滑動(dòng)時(shí),根據(jù)滑動(dòng)方向,滑動(dòng)距離兩個(gè)條件做相應(yīng)的事件處理.滑動(dòng)停止時(shí),同樣根據(jù)滑動(dòng)方向,滑動(dòng)距離兩個(gè)條件,來(lái)判斷是否需要將View側(cè)滑出來(lái).

  • 手勢(shì)滑動(dòng)時(shí),根據(jù)滑動(dòng)方向,滑動(dòng)距離兩個(gè)條件做相應(yīng)的事件處理


    手勢(shì)滑動(dòng).png
  • 手勢(shì)停止時(shí),根據(jù)滑動(dòng)方向,滑動(dòng)距離兩個(gè)條件,來(lái)判斷是否需要將View側(cè)滑出來(lái),還是恢復(fù)原狀


    手勢(shì)停止.png

源碼鏈接https://github.com/HelloYeah/HYSideViewController

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,199評(píng)論 4 61
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,954評(píng)論 25 709
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點(diǎn)贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 47,147評(píng)論 22 665
  • 義工扶貧活動(dòng)日記 (這是2017年2月7日我第一次參加義工活動(dòng)的隨感) 當(dāng)春節(jié)的鞭炮聲仍在響起的那天下...
    燕子高飛閱讀 1,480評(píng)論 16 13
  • 特地去百度了一下,哈利路亞是什么意思?哈利路亞在基督教中是“贊美主”的意思。 在韓國(guó)電影《圣殤》中,這個(gè)詞像是一個(gè)...
    錦瑟_db50閱讀 428評(píng)論 0 0

友情鏈接更多精彩內(nèi)容