美文网首页
iOS | 获取view在父类中的frame, 或子控件位置转换

iOS | 获取view在父类中的frame, 或子控件位置转换

作者: 想想8606 | 来源:发表于2022-03-29 15:57 被阅读0次
    // 将像素point由point所在视图转换到目标视图view中,返回在目标视图view中的像素值
    - (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view;
    // 将像素point从view中转换到当前视图中,返回在当前视图中的像素值
    - (CGPoint)convertPoint:(CGPoint)point fromView:(UIView *)view;
    
    // 将rect由rect所在视图转换到目标视图view中,返回在目标视图view中的rect
    - (CGRect)convertRect:(CGRect)rect toView:(UIView *)view;
    // 将rect从view中转换到当前视图中,返回在当前视图中的rect
    - (CGRect)convertRect:(CGRect)rect fromView:(UIView *)view;
    
    例把UITableViewCell中的subview(btn)的frame转换到 controllerA中
    
    // controllerA 中有一个UITableView, UITableView里有多行UITableVieCell,cell上放有一个button
    // 在controllerA中实现:
    CGRect rc = [cell convertRect:cell.btn.frame toView:self.view];
    或
    CGRect rc = [self.view convertRect:cell.btn.frame fromView:cell];
    // 此rc为btn在controllerA中的rect
    
    或当已知btn时:
    CGRect rc = [btn.superview convertRect:btn.frame toView:self.view];
    或
    CGRect rc = [self.view convertRect:btn.frame fromView:btn.superview];
    

    子控件位置转换成父控件的位置

    CGRect focusFrame = [_scrollView convertRect:_joinView.frametoView:self.view];
    
    这里_scrollView是self.view的子控件
    
    _joinView是_scrollView的子控件,这里是计算出_joinView在self.view的位置,
    
    当然还有其他类似的方法
    
    [view convertPoint:<#(CGPoint)#> fromView:<#(UIView *)#>]
    
    [view convertPoint:<#(CGPoint)#> toView:<#(UIView *)#>]
    
    [self.view convertRect:<#(CGRect)#> fromView:<#(UIView *)#>]
    
    [self.view convertRect:<#(CGRect)#> toView:<#(UIView *)#>]
    

    比如说,我在一个view里面,想获取VC里一个fromView的frame,则:

    CGRect rc = [mFromView.superview convertRect:mFromView.frame toView:self];
    

    相关文章

      网友评论

          本文标题:iOS | 获取view在父类中的frame, 或子控件位置转换

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