Windows上のビューの位置を取得

1352 ワード

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
        }
    }
}

参考記事:https://www.cnblogs.com/zhanbaocheng/p/7855937.html