IOS 中的frame bounds的区别

来源:互联网 发布:活动噱头有哪些 知乎 编辑:程序博客网 时间:2024/05/06 20:00
UIView中的frame获取的是相对于所在ParentView的坐标,而bounds则是指UIView本身的坐标。
比如下图(假设A是屏幕):
    View B的Frame坐标是指相对于View A的坐标,即(50,50),其bounds的坐标是(0,0)
    View C的Frame坐标是指相对于View B的坐标,即(50,50). 但其bounds坐标依然是(0,0),但其绝对坐标是(100,100)
 


可以通过以下函数完成坐标体系在不同View之间的切换,如下面是完成当前View向ParentView坐标的转换(一个矩阵转换)

CGRect parentRect = [currentView convertRect:blankImageView.bounds toView:self.superview];


// 将像素pointpoint所在视图转换到目标视图view中,返回在目标视图view中的像素值

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

// 将像素pointview中转换到当前视图中,返回在当前视图中的像素值

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


// rectrect所在视图转换到目标视图view中,返回在目标视图view中的rect

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

// rectview中转换到当前视图中,返回在当前视图中的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];

// rcbtncontrollerA中的rect


或当已知btn时:

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

CGRect rc = [self.view convertRect:btn.frame fromView:btn.superview];


原创粉丝点击