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

iOS高仿微信文章懸浮球功能

 更新時間:2018年08月16日 16:10:55   作者:yyuuzhu  
這篇文章主要介紹了iOS高仿微信文章懸浮球功能,本文給大家介紹的非常詳細,具有一定的參考解決價值,需要的朋友可以參考下

前言

微信在最新版本6.6.7,新加了一個文章懸浮球功能。當(dāng)你正在閱讀文章的時候,突然有好友發(fā)來了緊急消息,你需要立即回復(fù)。又或者你剛好路過小吃店,需要臨時打開微信支付,等等臨時中斷閱讀的情況。以前只有退出文章詳情頁面,處理完事情之后,再挨著挨著找到原來的文章。對于我們這種重度微信使用者來說,每次遭遇這種情況。所以,當(dāng)這個功能推出的事情,立馬更新了最新版本,這個功能感覺就像遇到了知心人一樣,用起來十分順手。可以通過下面的動圖感受一下

其實懸浮球的概念早就有了。比如360助手的流量監(jiān)控球,iPhone自帶的AssitiveTouch(就是那個可愛的小白球)等等。

倉庫地址

Github地址 喜歡就點顆:heart:

核心技術(shù)點

體驗過后,讓人手癢癢,情不自禁得想要模仿一把。如果你的APP可以集成該功能,我覺得可以讓你的APP逼格瞬間提升一個level。好了,下面讓我們來一一解剖,微信文章懸浮球的核心技術(shù)點:

1.懸浮球的出現(xiàn)

當(dāng)我們通過屏幕邊緣手勢pop視圖的時候,右下角會有一個圓角提示圖,跟著手勢進度移動。

如何獲取到UIScreenEdgePanGestureRecognizer的進度呢?

因為系統(tǒng)自帶的interactivePopGestureRecognizer是被封裝起來的,它的action我們無法掛鉤拿到里面的手勢進度。所以,需要另辟蹊徑了。

首先,讓UINavigationController的delegate等于自己,然后讓多個手勢可以同時響應(yīng)。

self.interactivePopGestureRecognizer?.delegate = self

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
  return true
 }

然后自己添加一個UIScreenEdgePanGestureRecognizer到UINavigationController上面,用于獲取pop手勢的進度。

let gesture = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(handleNavigationTransition(gesture:)))
gesture.edges = .left
self.view.addGestureRecognizer(gesture)

這樣子,有兩個UIScreenEdgePanGestureRecognizer可以同時響應(yīng),系統(tǒng)自帶的依然保持原有邏輯不動,我們新增的用于獲取pop手勢進度,兩者井水不犯河水,其樂融融。

2.懸浮球全局置頂

既然懸浮球可以在懸浮在任何一個頁面,必然是放在一個新的UIWindow上面。比如系統(tǒng)的鍵盤彈出的時候,就是一個UIRemoteKeyboardWindow在承載。

然后這個window的生命周期不依賴某一個頁面,所以用單例實現(xiàn)比較好。這塊代碼比較分散,直接看源碼就可以了解

3.事件響應(yīng)

懸浮UIWindow的事件傳遞

只要事件位置沒有在圓球和右下角上,就不響應(yīng)

override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
  let roundEntryViewPoint = self.convert(point, to: roundEntryView)
  if roundEntryView.point(inside: roundEntryViewPoint, with: event) == true {
   return true
  }
  let collectViewPoint = self.convert(point, to: collectView)
  if collectView.point(inside: collectViewPoint, with: event) == true {
   return true
  }
  return false
 }

右下角四分之一圓,事件響應(yīng)

可以看到微信,只有當(dāng)手指移動進右下角圓內(nèi),才能進行懸浮。而不是按著視圖的frame來響應(yīng)。

首先,通過UIBezierPath畫一個四分之一圓,然后用CGPath的contains(point)方法判斷。

func updateBGLayerPath(isSmall: Bool) {
  var ratio:CGFloat = 1
  if !isSmall {
   ratio = 1.3
  }
  let path = UIBezierPath()
  path.move(to: CGPoint(x: viewSize.width, y: (1 - ratio)*viewSize.height))
  path.addLine(to: CGPoint(x: viewSize.width, y: viewSize.height))
  path.addLine(to: CGPoint(x: (1 - ratio)*viewSize.width, y: viewSize.height))
  path.addArc(withCenter: CGPoint(x: viewSize.width, y: viewSize.height), radius: viewSize.width*ratio, startAngle: CGFloat(Double.pi), endAngle: CGFloat(Double.pi*3/2), clockwise: true)
  path.close()
  bgLayer.path = path.cgPath
 }
 override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
  return bgLayer.path!.contains(point)
 }

4.自定義轉(zhuǎn)場動畫

可以看到點擊懸浮球打開的文章,是通過一個自定義轉(zhuǎn)場動畫實現(xiàn)的,從懸浮球的位置開始展開。

有許多文章都有講解如何自定義轉(zhuǎn)場動畫,但是我推薦你看這篇文章 幾句代碼快速集成自定義轉(zhuǎn)場效果+ 全手勢驅(qū)動

實現(xiàn)效果

總結(jié)

微信的懸浮球,用到的技術(shù)點相對比較多,代碼也比較分    散,如果你的APP要集成該功能,需要認真封裝代碼。

相對于如何實現(xiàn),我認為如何設(shè)計好一個需求更重要。我在模仿的過程中,發(fā)現(xiàn)其中有許多細節(jié)的邏輯,彼此環(huán)環(huán)相扣,最終就呈現(xiàn)出了你正在使用的懸浮球功能。

都說程序員和產(chǎn)品經(jīng)理是相愛相殺,在這里我要為該功能的產(chǎn)品經(jīng)理點個贊

倉庫地址

如果代碼中有任何問題,否則你有任何疑問,都可以反饋給我,我將第一時間處理。

Github地址 喜歡就點顆:heart:

總結(jié)

以上所述是小編給大家介紹的iOS高仿微信文章懸浮球功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • iOS中SQLite使用教程

    iOS中SQLite使用教程

    sqlite是嵌入式的和輕量級的sql數(shù)據(jù)庫。sqlite是由c實現(xiàn)的。廣泛用于包括瀏覽器(支持html5的大部分瀏覽器,ie除外)、ios、android以及一些便攜需求的小型web應(yīng)用系統(tǒng)
    2016-03-03
  • IOS 開發(fā)之ObjectiveC的變量類型的字符代表

    IOS 開發(fā)之ObjectiveC的變量類型的字符代表

    這篇文章主要介紹了IOS 開發(fā)之ObjectiveC的變量類型的字符代表的相關(guān)資料,這里舉例說明如何使用Objective的變量類型的字符,幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下
    2017-08-08
  • 詳解IOS中文件路徑判斷是文件還是文件夾

    詳解IOS中文件路徑判斷是文件還是文件夾

    這篇文章主要介紹了詳解IOS中文件路徑判斷是文件還是文件夾的相關(guān)資料,這里提供兩種實現(xiàn)方法,需要的朋友可以參考下
    2017-09-09
  • iOS開發(fā)中Swift逃逸閉包知識

    iOS開發(fā)中Swift逃逸閉包知識

    這篇文章主要介紹了iOS開發(fā)中Swift逃逸閉包的相關(guān)知識點以及需要注意的地方,需要的朋友收藏下吧。
    2018-02-02
  • iOS設(shè)計模式——Category簡單介紹

    iOS設(shè)計模式——Category簡單介紹

    這篇文章主要介紹了iOS設(shè)計模式——Category簡單介紹,有興趣學(xué)習(xí)的同學(xué)可以了解一下。
    2016-11-11
  • iOS tableView實現(xiàn)下拉圖片放大效果

    iOS tableView實現(xiàn)下拉圖片放大效果

    這篇文章主要為大家詳細介紹了iOS tableView實現(xiàn)下拉圖片放大效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • iOS新浪微博、騰訊微博分享功能實例

    iOS新浪微博、騰訊微博分享功能實例

    這篇文章主要為大家詳細介紹了iOS新浪微博、騰訊微博分享功能實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • iOS開發(fā)中如何優(yōu)雅的調(diào)試數(shù)據(jù)庫詳解

    iOS開發(fā)中如何優(yōu)雅的調(diào)試數(shù)據(jù)庫詳解

    這篇文章主要給大家介紹了關(guān)于iOS開發(fā)中如何優(yōu)雅的調(diào)試數(shù)據(jù)庫的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • IOS中計算緩存文件的大小判斷實例詳解

    IOS中計算緩存文件的大小判斷實例詳解

    這篇文章主要介紹了IOS中計算緩存文件的大小判斷實例詳解的相關(guān)資料,希望通過本能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • 簡單說說iOS之WKWebView的用法小結(jié)

    簡單說說iOS之WKWebView的用法小結(jié)

    iOS8.0之后我們使用 WebKit框架中的WKWebView來加載網(wǎng)頁。這篇文章主要介紹了簡單說說iOS之WKWebView的用法小結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01

最新評論

天门市| 泗阳县| 志丹县| 岗巴县| 长垣县| 丰都县| 明光市| 格尔木市| 灵石县| 石棉县| 赞皇县| 静安区| 隆回县| 乌恰县| 寿阳县| 遵义市| 华池县| 包头市| 杭州市| 西贡区| 三都| 乳源| 偏关县| 固阳县| 连平县| 云梦县| 宜章县| 金堂县| 林甸县| 房山区| 孝义市| 苗栗县| 石柱| 长宁区| 张家川| 余姚市| 屯昌县| 商丘市| 黑河市| 图木舒克市| 临猗县|