iOS開発は、画面に表示されているビューの位置をどのように取得しますか?


前言
iOSの開発において、よく問題が発生すると思います。例えば、ボタンをクリックしてカバー層を弾いて、上には弾枠が表示されています。ボックスの表示位置はボタンの近くにあります。このボタンの位置がスクリーンエッジに対する距離が固定されていると、デッドポジションを直接書き込むことができます。しかし、もしボタンがUITTablewのcellにあるとしたら?UITTable Viewのスクロールによって、ボタンは上の方にあるかもしれません。下の方にあるかもしれません。真ん中にあるかもしれません。左側、右側にあるかもしれません。この時は、ボタンの位置をどう計算しますか?ボタンがあるUITabelViewが別のUScrrollViewの一つのセルにあるとしたら?もし外にもう一つのローラーがあったら?この配置は確かに複雑です。
最近会社のプロジェクトの中に需要があります。使う階層はUITable Viewの中にUITable ViewとUICCollection Viewが嵌め込まれています。そしてボタンを押すと、最初の情報リストのような小さなフォークがあります。ボタンの横に表示され、情報を遮断するなどの操作ができます。ボタンをクリックする時にトップクラスのカバー層を弾いてカバーの上に操作エリアを追加しましたが、操作エリアの位置はボタンの位置によって確定します。だから、ボタンのスクリーン上の位置を探すために時間がかかりました。
方法は以下の通りです
コードは多くないです。UID Viewの拡張方法を書けばいいです。

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()
コードの量は少ないですが、ロジックを考える時間もかかりました。Baiduなどの検索は行っていません。自分で書くことができます。やはり自分で時間をかけて考えます。
コントロールの画面に対する位置を取得します。
取得したいオブジェクトがview 1である場合、このビューのスクリーンに対する位置は、以下の方法で実現できます。

UIWindow * window=[[[UIApplication sharedApplication] delegate] window];
 CGRect rect=[view1 convertRect: view1.bounds toView:window];
締め括りをつける
以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に対して一定の参考となる学習価値を持っています。質問があれば、メッセージを書いて交流してください。ありがとうございます。