iOS开发之如何获取视图在屏幕中显示的位置

 更新时间:2017年11月19日 11:34:19   作者:返回主页 残无殇  
这篇文章主要给大家介绍了关于iOS开发之如何获取视图在屏幕上显示的位置,以及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 App开发中控制屏幕旋转的几种方式

    总结iOS App开发中控制屏幕旋转的几种方式

    这篇文章主要介绍了iOS app开发中控制屏幕旋转的方法总结,分为自动旋转和手动旋转以及强制旋转三种情况,代码为Objective-C语言,需要的朋友可以参考下
    2016-02-02
  • IOS Xcode调试常用命令和断点整理

    IOS Xcode调试常用命令和断点整理

    这篇文章主要介绍了IOS Xcode调试常用命令和断点整理的相关资料,这里对IOS Xcode调试常用命令进行了总结,需要的朋友可以参考下
    2016-12-12
  • 详解iOS应用程序的启动过程

    详解iOS应用程序的启动过程

    这篇文章主要介绍了iOS应用程序的启动过程,讲述了从其执行main函数开始到展示UIWindow的流程中的一些关键点,需要的朋友可以参考下
    2016-03-03
  • iOS关于多张图片上传、地址返回顺序问题及解决方案

    iOS关于多张图片上传、地址返回顺序问题及解决方案

    这篇文章主要介绍了iOS关于多张图片上传、地址返回顺序问题,文章给大家带来了三种解决方案,通过实例文字说明相结合的形式给大家介绍的非常详细,需要的朋友可以参考下
    2018-07-07
  • IOS 头文件导入-@class注意事项总结

    IOS 头文件导入-@class注意事项总结

    这篇文章主要介绍了IOS 头文件导入-@class注意事项总结的相关资料,需要的朋友可以参考下
    2017-05-05
  • iOS程序性能优化的技巧

    iOS程序性能优化的技巧

    这篇文章主要介绍了一些优化iOS程序性能的技巧,帮助大家更好的进行ios开发,感兴趣的朋友可以了解下
    2020-09-09
  • iOS编写下拉刷新控件

    iOS编写下拉刷新控件

    这篇文章主要介绍了iOS编写下拉刷新控件的相关资料,iOS如何写个普通的下拉刷新的控件,需要了解的朋友可以参考下文
    2016-04-04
  • iOS三级联动选择器的实现代码示例

    iOS三级联动选择器的实现代码示例

    本篇文章主要介绍了iOS三级联动选择器的实现代码示例,这里整理了详细的代码,有需要的小伙伴可以参考下
    2017-09-09
  • iOS简单抽屉效果的实现方法

    iOS简单抽屉效果的实现方法

    这篇文章主要为大家详细介绍了iOS简单抽屉效果的实现方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • iOS实现双向滑动条效果

    iOS实现双向滑动条效果

    这篇文章主要为大家详细介绍了iOS实现双向滑动条效果的相关代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-03-03

最新评论