亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS開發之怎樣獲取視圖在屏幕中顯示的位置

發布時間:2021-02-20 10:56:02 來源:億速云 閱讀:286 作者:小新 欄目:移動開發

小編給大家分享一下iOS開發之怎樣獲取視圖在屏幕中顯示的位置,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

前言

相信大家在iOS開發中經常會遇到一個問題,例如,點擊一個按鈕,彈出一個遮罩層,上面顯示一個彈框,彈框顯示的位置在按鈕附近。如果這個按鈕的位置相對于屏幕邊緣的距離是固定的,那就容易了,可以直接寫死位置。可是,如果按鈕是在UITableView的cell上呢?隨著UITableView的滾動,按鈕可能在頂部,也可能在底部,還可能在中間,左側、右側都有可能,那么,這個時候,怎么去計算按鈕所在的位置呢?如果按鈕所在的UITabelView是在另外一個UIScrollView的一個cell上呢?如果外面再有一個滾動層呢?這種布局確實很復雜。

最近公司的項目中有一個需求,所使用的層級就是一個UITableView中嵌套了一個UITableView和一個UICollectionView,而且還有一個點擊按鈕,效果就類似于頭條資訊列表的小叉號,點擊在按鈕旁邊彈出一個視圖,對資訊進行屏蔽等操作。我在點擊按鈕的時候彈出一個頂級的遮罩層,在遮罩上面增加了一個操作的區域,但是,操作區域的位置需要根據按鈕的位置進行確定,所以,花了點時間寫了個方法,用來找到按鈕在屏幕上的位置,相對于屏幕來說的;

方法如下:

其實代碼并不多,只需要寫一個UIView的擴展方法就行

extension UIView {
 func zhmfPositionInScreen() -> CGPoint {
 /// 先判斷是否有父視圖,如果沒有父視圖,直接返回視圖的位置就行
 if let superView = self.superview {
  /**
  判斷父視圖是否是UIScrollView或者繼承自UIScrollView
  
  先使用視圖在屏幕上的位置使用視圖的位置與父視圖的位置X與Y分別相加
  
  如果父視圖不是UIScrollView并且不繼承自UIScrollView,則直接返回結果
  
  如果父視圖是UIScrollView或者繼承自UIScrollView

  還需要分別減去UIScrollView的scrollViewOffset.x和scrollViewOffset.y,然后返回結果
  */
  if let scrollView = superView as? UIScrollView {
  let position = CGPoint.init(x: self.frame.origin.x, y: self.frame.origin.y)
  let superPosition = superView.zhmfPositionInScreen()
  let scrollViewOffset = scrollView.contentOffset
  return CGPoint.init(x: superPosition.x + position.x - scrollViewOffset.x , y: superPosition.y + position.y - scrollViewOffset.y)
  } else {
  let superPosition = superView.zhmfPositionInScreen()
  let position = self.frame.origin
  return CGPoint.init(x: superPosition.x + position.x, y: superPosition.y + position.y)
  }
 } else {
  return self.frame.origin
 }
 }
}

獲取視圖在屏幕上位置的擴展方法已經寫好了,只需要在使用的使用調一下就好了

button.zhmfPositionInScreen()

雖然代碼量不大,但當時也花了一點時間想邏輯,沒有去百度等搜索,能自己寫的,還是自己花時間想吧,不然,腦子懶了,就真的只能是碼農了。

ios 獲取控件相對屏幕的位置

需要獲取的對象為view1,則該視圖相對屏幕的位置可使用下面方法實現:

UIWindow * window=[[[UIApplication sharedApplication] delegate] window];
 CGRect rect=[view1 convertRect: view1.bounds toView:window];

看完了這篇文章,相信你對“iOS開發之怎樣獲取視圖在屏幕中顯示的位置”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

ios
AI

怀柔区| 涟源市| 抚远县| 赫章县| 兰西县| 民勤县| 凯里市| 锡林郭勒盟| 泽州县| 筠连县| 车险| 巫溪县| 额尔古纳市| 玉门市| 正定县| 阳新县| 和静县| 门头沟区| 松阳县| 钟祥市| 电白县| 武宁县| 宁化县| 从化市| 济南市| 秦皇岛市| 江西省| 隆林| 林芝县| 社旗县| 永定县| 榆树市| 贵州省| 宜阳县| 牙克石市| 松桃| 英德市| 江城| 孝义市| 衡南县| 略阳县|