亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2017年11月19日 11:34:19   作者:返回主頁 殘無殤  
這篇文章主要給大家介紹了關(guān)于iOS開發(fā)之如何獲取視圖在屏幕上顯示的位置,以及ios 獲取控件相對屏幕的位置的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們隨著小編來一起學習學習吧。

前言

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

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

方法如下:

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

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

  還需要分別減去UIScrollView的scrollViewOffset.x和scrollViewOffset.y,然后返回結(jié)果
  */
  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
 }
 }
}

獲取視圖在屏幕上位置的擴展方法已經(jīng)寫好了,只需要在使用的使用調(diào)一下就好了

button.zhmfPositionInScreen()

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

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

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

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

總結(jié)

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

相關(guān)文章

  • iOS11 下載之斷點續(xù)傳的bug的解決方法

    iOS11 下載之斷點續(xù)傳的bug的解決方法

    本篇文章主要介紹了iOS11 下載之斷點續(xù)傳的bug的解決方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • ios開發(fā)加載webview顯示進度條實例

    ios開發(fā)加載webview顯示進度條實例

    本篇文章主要介紹了ios開發(fā)加載webview顯示進度條實例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • IOS開發(fā)實現(xiàn)手機震動的提示實例代碼

    IOS開發(fā)實現(xiàn)手機震動的提示實例代碼

    這篇文章主要介紹了IOS開發(fā)實現(xiàn)手機震動的提示實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • iOS模仿電子書首頁實現(xiàn)書架布局樣式

    iOS模仿電子書首頁實現(xiàn)書架布局樣式

    這篇文章主要為大家詳細介紹了iOS實現(xiàn)類似電子書首頁效果樣式,實現(xiàn)書架布局樣式,感興趣的小伙伴們可以參考一下
    2016-03-03
  • iOS生成圖片數(shù)字字母驗證效果

    iOS生成圖片數(shù)字字母驗證效果

    這篇文章主要為大家詳細介紹了iOS生成圖片數(shù)字字母驗證效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • iOS利用Block逆向傳值的方式詳解

    iOS利用Block逆向傳值的方式詳解

    大家應該都有所了解在iOS開發(fā)中,常見的幾種逆向傳值方式,有代理(delegate)、通知(NSNotification),block等等,之前已經(jīng)給大家介紹了通過代理實現(xiàn)逆向傳值的方法,這篇文章來給大家介紹如何通過Block進行逆向傳值,有需要的朋友們下面跟著小編一起來學習學習吧。
    2016-12-12
  • IOS 仿時光網(wǎng)選票UI實例代碼

    IOS 仿時光網(wǎng)選票UI實例代碼

    這篇文章主要介紹了IOS 仿時光網(wǎng)選票UI實例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • IOS代碼筆記之左右滑動效果

    IOS代碼筆記之左右滑動效果

    這篇文章主要為大家詳細介紹了IOS代碼筆記之左右滑動效果的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • iOS中navigationController 去掉背景圖片、去掉底部線條的核心代碼

    iOS中navigationController 去掉背景圖片、去掉底部線條的核心代碼

    本文給大家?guī)砹薸OS中navigationController 去掉背景圖片、去掉底部線條的核心代碼,有需要的朋友可以參考下
    2016-08-08
  • iOS推送的那些事

    iOS推送的那些事

    關(guān)于iOS推送的那些事,你知道多少?本文帶著大家一起了解iOS推送,感興趣的小伙伴們可以參考一下
    2016-02-02

最新評論