国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

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

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

前言

相信大家在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];

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 静海县| 东海县| 西充县| 潜山县| 布尔津县| 昆山市| 厦门市| 九龙城区| 利辛县| 宜昌市| 渝中区| 高阳县| 阳曲县| 博客| 酉阳| 嘉禾县| 重庆市| 汾阳市| 游戏| 彭阳县| 砚山县| 镇平县| 讷河市| 荆门市| 新邵县| 若羌县| 吉安市| 玉山县| 密云县| 德令哈市| 咸丰县| 株洲市| 泸定县| 潜山县| 崇信县| 通山县| 海伦市| 虞城县| 巴东县| 临邑县| 石泉县|