convertPoint,convertRect,convertPoint:toLayer:系列函数(未完)

背景知识

Every UIView has its own coordinates system. 

convertPoint:toView: allows the developer to take a point in one view and convert the point to another view coordinate system.

Example:

view1 contains view2. The top left corner of view2 is located at view1 point (10,10), or better to say view2.frame.orgin = {10,10}. 

That {10,10} is based in the view1 coordinate system. So far so good.

The user touches the view2 at point {20,20} inside the view2. Now those coordinates are in the view2 coordinate system.

You can now use covertPoint:toView: to convert {20,20} into the coordinate system of view1. touchPoint = {20,20}

CGPoint pointInView1Coords = [view2 convertPoint:touchPoint toView:view1];

So now pointInView1Coords should be {30,30} in the view1 coordinate systems. 

Now that was just simple math on this example, but there are all sorts of things that contribute to the conversion. 

Transforms and scaling come to mind.

Read about UIView frame, bounds, and center. They are all related and they deal with coordinate systems for a view. 

Its confusing until you start doing stuff with them. 

Remember this frame and center are in the parent's coordinate system. 

Bounds is in the view's coordinate system.


各函数简介

// 将像素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;


// Converts the point from the receiver’s coordinate system to the specified layer’s coordinate system.

- (CGPoint)convertPoint:(CGPoint)aPoint toLayer:(CALayer *)layer


// Converts the point from the specified layer’s coordinate system to the receiver’s coordinate system.

- (CGPoint)convertPoint:(CGPoint)aPoint fromLayer:(CALayer *)layer



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];

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值