亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

IOS中Swift仿QQ最新版抽屜側滑和彈框視圖

2020-07-26 02:53:53
字體:
來源:轉載
供稿:網友

導讀

簡單用Swift寫了一個抽屜效果,可以直接使用并且簡單;

很多軟件都運了抽屜效果,比如qq的左抽屜,英雄聯盟,滴滴打車,和uber等等都運用了抽屜;

效果


iOS抽屜式結構實現分析

主要是在控制器的View上添加了兩個View,一個左側leftView和一個mainView。這里我們自定義一個DrawerViewController,init(mainVC: UIViewController, leftMenuVC: UIViewController, leftWidth: CGFloat)設置,一個mainVC,一個leftMenuVC,和一個寬度,將mainVC和leftMenuVC的view添加到controller的view上(menuVC的view在下面)。

   view.addSubview(leftMenuVC.view)   view.addSubview(mainVC.view)   addChildViewController(leftMenuVC)   addChildViewController(mainVC)

然后首先實現點擊方法openLeftMenu和closeLeftMenu(這兩個方法主要是計算mainVC的view的位置)方便以后調用。

//MARK: - 打開左側菜單  func openLeftMenu() {    UIView.animate(withDuration: 0.25, delay: 0, options: UIViewAnimationOptions.curveLinear, animations: {      self.leftVC?.view.transform = CGAffineTransform.identity      self.mainVC?.view.transform = CGAffineTransform(translationX: self.maxWidth, y: 0)    }, completion: {      (finish: Bool) -> () in      self.mainVC?.view.addSubview(self.coverBtn)    })  }  //MARK: - 關閉左側菜單  func closeLeftMenu() {    UIView.animate(withDuration: 0.25, delay: 0, options: UIViewAnimationOptions.curveLinear, animations: {      self.leftVC?.view.transform = CGAffineTransform(translationX: -self.maxWidth, y: 0)      self.mainVC?.view.transform = CGAffineTransform.identity    }, completion: {      (finish: Bool) -> () in      self.coverBtn.removeFromSuperview()    })  }

最后給mainVC的view添加屏幕邊緣手勢,實現mainVC的view跟隨手指移動。循環遍歷view給每一個一級視圖添加手勢

for childViewController in (mainVC?.childViewControllers)! {     addScreenEdgePanGestureRecognizerToView(view: childViewController.view)   }
//MARK: - 添加屏幕邊緣手勢  private func addScreenEdgePanGestureRecognizerToView(view: UIView) {    let pan = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(edgPanGesture(_:)))    pan.edges = UIRectEdge.left    view.addGestureRecognizer(pan)  }

在平移手勢調用的方法中,通過偏移量來確定mainView的frame,實現動畫效果

  1. 首先通過pan.translation(in: pan.view).x方法獲取偏移量,通過偏移量的正負確定拖動的方向
  2. 當手指松開后需要根據mainView的x值確定其視圖是定位到原始位置還是其縮放的位置

打開手勢

//MARK: - 屏幕左邊緣手勢  func edgPanGesture(_ pan: UIScreenEdgePanGestureRecognizer) {    let offsetX = pan.translation(in: pan.view).x    if pan.state == UIGestureRecognizerState.changed && offsetX <= maxWidth {      mainVC?.view.transform = CGAffineTransform(translationX: max(offsetX, 0), y: 0)      leftVC?.view.transform = CGAffineTransform(translationX: -maxWidth + offsetX, y: 0)    } else if pan.state == UIGestureRecognizerState.ended || pan.state == UIGestureRecognizerState.cancelled || pan.state == UIGestureRecognizerState.failed {      if offsetX > screenW * 0.5 {        openLeftMenu()      } else {        closeLeftMenu()      }    }  }

關閉遮蓋手勢

//MARK: - 遮蓋按鈕手勢  func panCloseLeftMenu(_ pan: UIPanGestureRecognizer) {    let offsetX = pan.translation(in: pan.view).x    if offsetX > 0 {return}    if pan.state == UIGestureRecognizerState.changed && offsetX >= -maxWidth {      let distace = maxWidth + offsetX      mainVC?.view.transform = CGAffineTransform(translationX: distace, y: 0)      leftVC?.view.transform = CGAffineTransform(translationX: offsetX, y: 0)    } else if pan.state == UIGestureRecognizerState.ended || pan.state == UIGestureRecognizerState.cancelled || pan.state == UIGestureRecognizerState.failed {      if offsetX > screenW * 0.5 {        openLeftMenu()      } else {        closeLeftMenu()      }    }  }

UIPresentationController簡介

  1. UIPresentationController是 iOS8 新增的一個API,蘋果的官方定義是:對象為所呈現的視圖控制器提供高級視圖的轉換管理(從呈現視圖控制器的時間直到它被消除期間);
  2. iOS 8以前就是自定義view,去畫一個三角和長方形;
  3. 簡單直接的方法用圖片

直接貼代碼不講廢話

@IBAction func showAlert(_ sender: UIBarButtonItem) {    let popVC = PopViewController()    popVC.modalPresentationStyle = UIModalPresentationStyle.popover    popVC.popoverPresentationController?.barButtonItem = sender    popVC.popoverPresentationController?.delegate = self    //可控制三角顏色    popVC.popoverPresentationController?.backgroundColor = UIColor.white    present(popVC, animated: true, completion: nil)  }  func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {    return UIModalPresentationStyle.none  }  func popoverPresentationControllerShouldDismissPopover(_ popoverPresentationController: UIPopoverPresentationController) -> Bool {    return true  }

具體代碼可以從這里下載:WLDrawerView_jb51.rar

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品国产亚洲| 国产精国产精品| 亚洲sss综合天堂久久| 国产欧美日韩丝袜精品一区| 亚洲欧美日韩中文在线制服| 日韩女在线观看| 这里只有精品视频| 性色av香蕉一区二区| 懂色av影视一区二区三区| 另类美女黄大片| 日韩在线视频免费观看| 欧美日韩电影在线观看| 美女精品久久久| 久久久综合av| 日韩欧美极品在线观看| 亚洲夜晚福利在线观看| 欧美一级大胆视频| 亚洲欧美福利视频| 97在线精品国自产拍中文| 精品一区精品二区| 国产一区二区丝袜| 久久久免费精品视频| 欧美日韩加勒比精品一区| 91国产精品视频在线| 91久久精品国产91久久性色| 动漫精品一区二区| 欧美激情中文字幕乱码免费| 亚洲成av人片在线观看香蕉| 97人人模人人爽人人喊中文字| 欧美日韩国产区| 国内精品一区二区三区四区| 在线看福利67194| 国自产精品手机在线观看视频| zzijzzij亚洲日本成熟少妇| 日韩在线欧美在线| 国产不卡av在线免费观看| 亚洲精品一区二区在线| 精品一区二区三区四区在线| 亚洲美女在线视频| 国产欧美一区二区三区久久| 欧美激情综合亚洲一二区| 国产日产欧美精品| 日本精品中文字幕| 国产精品高潮视频| 国产精品一香蕉国产线看观看| 精品日韩视频在线观看| 国产一区二区黑人欧美xxxx| 久热精品在线视频| 精品亚洲va在线va天堂资源站| 日本高清+成人网在线观看| 97人人爽人人喊人人模波多| 91日本视频在线| 国产啪精品视频网站| 欧美第一黄网免费网站| 亚洲欧美福利视频| 国产精品一区二区久久| 日日骚av一区| 亚洲激情视频在线播放| 欧美有码在线观看| 日韩国产欧美精品在线| 一区二区国产精品视频| 亚洲精品视频免费在线观看| 色与欲影视天天看综合网| 97免费视频在线| 欧美性猛交视频| 深夜福利日韩在线看| 国产精品夜色7777狼人| 成人激情春色网| 粉嫩av一区二区三区免费野| 久久亚洲国产精品成人av秋霞| 欧亚精品在线观看| 欧美在线观看一区二区三区| 欧美激情视频一区二区三区不卡| 日韩av电影在线免费播放| 精品一区二区三区三区| 亚洲午夜未删减在线观看| 欧美激情精品久久久久久变态| 免费av一区二区| 亚洲精品在线看| 日本在线精品视频| 91精品久久久久久久久青青| 日本一区二区三区在线播放| 国产一区私人高清影院| 日韩美女视频免费在线观看| 欧美激情按摩在线| 欧美与欧洲交xxxx免费观看| 国产色婷婷国产综合在线理论片a| 欧美视频在线看| 国产精品免费一区| 日韩有码片在线观看| 欧美激情精品久久久久| 国产精品久久久久久久久久免费| 色播久久人人爽人人爽人人片视av| 午夜精品一区二区三区视频免费看| 精品国产乱码久久久久酒店| 国产91精品久久久久久| 亚洲专区中文字幕| 中文字幕亚洲欧美在线| 国内精品久久久久久影视8| 国产精品99导航| 俺也去精品视频在线观看| 国产精品专区一| 欧美夫妻性生活视频| 中日韩美女免费视频网站在线观看| 日韩小视频网址| 国产精品99蜜臀久久不卡二区| 色综合久久悠悠| 久操成人在线视频| 96精品视频在线| 91精品国产91久久久久久吃药| 岛国av一区二区在线在线观看| 欧美日韩精品在线视频| 国产剧情日韩欧美| 国产91对白在线播放| 亚洲第一精品夜夜躁人人躁| 亚洲一区第一页| 亚洲理论电影网| 日韩av资源在线播放| 91亚洲精品久久久久久久久久久久| 国产亚洲精品一区二区| 欧洲成人午夜免费大片| 亚洲а∨天堂久久精品9966| 91国内产香蕉| 中文欧美日本在线资源| 91av在线精品| 欧美另类极品videosbest最新版本| 午夜精品久久17c| 成人免费在线视频网址| 成人免费xxxxx在线观看| 国语自产精品视频在免费| 黑人与娇小精品av专区| 亚洲欧美日韩天堂| 日韩av123| 日本精品久久中文字幕佐佐木| 欧美成人精品不卡视频在线观看| 97国产精品免费视频| 成人久久久久爱| 插插插亚洲综合网| 成人久久一区二区三区| 欧美日韩激情小视频| 97超级碰在线看视频免费在线看| 另类视频在线观看| 97精品国产97久久久久久| 欧美高清一级大片| 久久99国产精品自在自在app| 亚洲国产成人91精品| 色综合色综合久久综合频道88| 欧美国产日韩免费| 国产成人精品视频在线观看| 久久久久国色av免费观看性色| 亚洲天堂av综合网| 国产精品久久久久久久7电影| 亚洲成年人影院在线| 亚洲美腿欧美激情另类| 中文字幕亚洲一区| 91高清视频免费观看| 久久91精品国产91久久久| 欧美成人精品不卡视频在线观看| 欧美高清一级大片| 国产精品18久久久久久麻辣| 久久青草精品视频免费观看| 91精品久久久久| 精品久久久久久中文字幕大豆网| 伊人伊人伊人久久|