美文网首页
iOS开发之坐标系转换

iOS开发之坐标系转换

作者: tangbin583085 | 来源:发表于2017-08-11 20:06 被阅读0次

最近开发遇到了一些UI需要作坐标系的转换,如图

需要在原来添加标签按钮添加一个引导功能,添加标签按钮要与引导的添加标签按钮百分百分吻合重叠

F93D4093747E29B1BE8117E71A4240C6.jpg C1C48F336FE7234F99308AC75C8F36C3.png

当时有点懵,因为这里叠了很多层界面,需要一层一层地转换坐标系,当时想到办法就是一层一层地转换参考坐标系,然后得出确切的Frame,计算起来非常繁琐(特别是UI叠了很多层之后)
后来无意间发现了苹果提供的一个函数,而且这个函数就在UIView.h里面!

- (CGRect)convertRect:(CGRect)rect toView:(nullable UIView *)view;
- (CGRect)convertRect:(CGRect)rect fromView:(nullable UIView *)view;

这2个函数的效果功能是一致的,只是参数调换位置而已。
看我关键源代码就清楚,字面也很好理解

CGRect rect = [self.view convertRect:addVerticalBtn.frame fromView:addVerticalBtn.superview];
// 或者
CGRect rect = [addVerticalBtn.superview convertRect:addVerticalBtn.frame toView:self.view];

说得简单点这2个函数的功能:把addVerticalBtn的frame参考坐标系转换为self.view的参考坐标系
不学不知道,原来这个函数功能真的挺强大的,后来我在项目的很多地方均使用到了,而且非常方便高效!

再举一个具体的例子:

827C47D3E87961CB8FF53D28C8DF2C20.png

要计算点击输入框后,tablew需要上移的偏移量,这个输入框的superView不再是table了(而是cell的contentView),如果自己手动计算的话,需要计算每个一个cell的高度从而得知table的整个高度再求出输入框的frame在table的确切位置。
但是利用上面的函数就能轻而易举的达到偏移量计算结果!

// 注册监听键盘通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyBoardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];

// 自动偏移table
- (void)keyBoardWillChangeFrame:(NSNotification *)notification{
    
    // 键盘最终的frame
    CGRect keyboardF = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
    
    if (keyboardF.origin.y == self.view.height) return;
    // 动画时间
//    CGFloat duration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
    
    CGRect rect = [self.textView.superview convertRect:self.textView.frame toView:self.tableView];
//    CGPoint offset = self.tableView.contentOffset;
    CGPoint point = CGPointMake(0, rect.origin.y - (self.tableView.height - keyboardF.size.height - self.textView.superview.height));
    [self.tableView setContentOffset:point animated:YES];
}

同理,以下2个函数应该也是一样的功能(实际项目中我还没什么用到,估计将来一定会用到),只是矩形变成了点

- (CGPoint)convertPoint:(CGPoint)point toView:(nullable UIView *)view;
- (CGPoint)convertPoint:(CGPoint)point fromView:(nullable UIView *)view;

相关文章

  • iOS开发之坐标系转换

    最近开发遇到了一些UI需要作坐标系的转换,如图 需要在原来添加标签按钮添加一个引导功能,添加标签按钮要与引导的添加...

  • IOS 通过经纬度计算两点的距离及坐标系转换

    通过经纬度计算两点的距离 坐标系转换 iOS开发中三大坐标系:地球坐标(WGS84) —— 国际标准,GPS标准从...

  • ios 地图坐标系转换

    ios 地图坐标系转换 https://segmentfault.com/a/1190000003023989 摘自网页

  • ios之坐标系转换

    hello,小伙伴们,大家好! 坐标系转换,不知道大家接触的多不多,我个人认为咋们开发中很多地方都可以用到这个知...

  • iOS开发中坐标系的转换

    一.官方方法 二.使用示例 1.场景图[图片上传失败...(image-7ceef2-1510195738500)...

  • 2018-03-04

    常用坐标系统知识点 1.坐标系统之间的转换 (1)坐标系分类 不同参心坐标系之间的转换、不同地心坐标系之间的转换;...

  • iOS 坐标系转换(convertPoint)

    直接移步简友的文章: iOS 坐标系转换(convertPoint)以及点在范围内的判断(pointInside)

  • ios-坐标系统

    转—ios-坐标系统(详解UIView的frame、bounds跟center属性 1、概要 翻开ios官方开发文...

  • iOS 坐标系转换

    原文链接:http://www.cocoachina.com/ios/20161206/18297.html 1....

  • iOS坐标系转换

    一、首先来看看一下我们的需求 将yellowView(黄色view)所在的frame转换为blueView(蓝色v...

网友评论

      本文标题:iOS开发之坐标系转换

      本文链接:https://www.haomeiwen.com/subject/cqmrrxtx.html