计算任意一个UIView相对屏幕的坐标 
计算任意一个UIView相对屏幕的坐标 
Youth_关旋 发表于11个月前
计算任意一个UIView相对屏幕的坐标 
  • 发表于 11个月前
  • 阅读 64
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

 

在很多时候,我们需要去计算一个UIView相对屏幕的坐标,来实现一些UI效果。 
在这个UIView未被嵌套多层的时候,相对屏幕的坐标很好算,只需要精准的拿到每层superview变量去计算。 
但是很多情况下,我们的UIView可能嵌套了很多层(我在项目中遇到的相对Controller.view就有6层之多),并且被嵌套在UIScrollView或者UITableView中,这个时候不可能去拿到每一层嵌套的superview的变量去计算。 
基于这个需求,我写了一个通用的方法,可以很方便的拿到任意一个UIView相对屏幕的坐标。 
 

代码虽然很简单,但是还是蛮实用的。

 

  1. /** 
  2.  *  计算一个view相对于屏幕(去除顶部statusbar的20像素)的坐标 
  3.  *  iOS7下UIViewController.view是默认全屏的,要把这20像素考虑进去 
  4.  */  
  5. + (CGRect)relativeFrameForScreenWithView:(UIView *)v  
  6. {  
  7.     BOOL iOS7 = [[[UIDevice currentDevice] systemVersion] floatValue] >= 7;  
  8.     
  9.     CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;  
  10.     if (!iOS7) {  
  11.         screenHeight -= 20;  
  12.     }  
  13.     UIView *view = v;  
  14.     CGFloat x = .0;  
  15.     CGFloat y = .0;  
  16.     while (view.frame.size.width != 320 || view.frame.size.height != screenHeight) {  
  17.         x += view.frame.origin.x;  
  18.         y += view.frame.origin.y;  
  19.         view = view.superview;  
  20.         if ([view isKindOfClass:[UIScrollView class]]) {  
  21.             x -= ((UIScrollView *) view).contentOffset.x;  
  22.             y -= ((UIScrollView *) view).contentOffset.y;  
  23.         }  
  24.     }  
  25.     return CGRectMake(x, y, v.frame.size.width, v.frame.size.height);  
  26. }  

获取view相对于屏幕的坐标。有方法的:

 

  1. CGRect frame = [view convertRect:view.bounds toView:nil];  
共有 人打赏支持
粉丝 2
博文 70
码字总数 23376
×
Youth_关旋
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: