了解convertRect:toView:,convertRect:FromView:convertPoint:toView:和convertPoint:fr...

 

我想了解你能一个了解他们的语义函数? 从例如convertPoint:fromView:方法描述如下: 一个点从一个给定的视图,该接收器的坐标系进行转换。 什么是坐标系是什么意思?怎么样的接收器? 例如,它使convertPoint:fromView:像下面这样?

CGPoint p = [view1 convertPoint:view1.center fromView:view1];

使用NSLog的工具,我已经验证了P值与厂景的中心重合。 预先感谢您。 编辑:对于那些有兴趣,我创建了一个简单的代码片段来理解

UIView* view1 = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 150, 200)];
view1.backgroundColor = [UIColor redColor];
NSLog(@"view1 frame: %@", NSStringFromCGRect(view1.frame));  
NSLog(@"view1 center: %@", NSStringFromCGPoint(view1.center)); 
CGPoint originInWindowCoordinates = [self.window convertPoint:view1.bounds.origin fromView:view1];  
NSLog(@"convertPoint:fromView: %@", NSStringFromCGPoint(originInWindowCoordinates));
CGPoint originInView1Coordinates = [self.window convertPoint:view1.frame.origin toView:view1];  
NSLog(@"convertPoint:toView: %@", NSStringFromCGPoint(originInView1Coordinates));

在这两种情况下self.window是接收器。但是有一个差别。在优先种情况下,convertPoint表现在厂景坐标。输出是以下内容: convertPoint:fromView:{100,100} 在第二个 CodeGo.net,相反,convertPoint表现在父视图(self.window)坐标。输出是以下内容: convertPoint:toView:{0,0}

 

1. 每个视图都有自己的坐标系-以原点为0,0,宽度和高度。这是在所描述的bounds矩形的看法。该frame的视图,但是,将具有其原点在点它的父视图的border矩形内。 您的视图层次的最外层观点有它的起源在0,0对应于iOS的屏幕左上方。 如果您在20,30添加一个子视图这一观点,然后在子视图一个点0,0在父视图对应一个点20,30。这种转换是在做什么。 上面的例子是没有意义的(没有双关语意),因为它从一个视图到其自身转换一个点,所以什么都不会发生。你会找出点看法是相对于它的父-测试是否有人动过的画面 CodeGo.net,例如:

CGPoint originInSuperview = [superview convertPoint:CGPointZero fromView:subview];

在“接收器”是一个标准的Objective-C的术语,表示正在接收(方法也是已知的,因此在我的例子在这里接收器对象superview
2. 在iOS中每个视图有一个坐标系。坐标系统就像是一个曲线图,其中有x轴方向(水平线)和Y轴(垂直线)。在该线interesect的点被称为原点.a 个点是由(X,Y)表示。例如,(2,1)表示的点是2个像素左,1个像素下来。 你可以阅读在这里更多关于坐标系- 但你要知道那是什么,在iOS中,每个视图都有自己的坐标系,其中左上角为原点。 X轴的推移增大到右侧,与y轴的推移增加了。 对于转换点的问题,借这个例子。 有一种说法,叫做V1,这是宽100像素,100像素高。现在里面的那个,还有另一种观点,称为V2,在(10,10,50,50),即(10,10)是 在点V 1的坐标系,其中V2的左上角应定位,和(50, 50)是V2的宽度和高度。现在,让里面点V2的坐标系,说(20,20)。现在,那又是什么点为V1的坐标系里面?这就是对(当然你可以计算自己,但他 们保存您额外的工作)。根据记录,在V1中的点是(30,30)。 希望这会有所帮助。
3. 下面是用简单的英语解释。当你想使一个视图一个子视图(aView)([aView父视图])另一个视图(个体经营)的子视图,而不在屏幕上它的“移动”这些函数。

// So here I want to take some subview and put it in my view's coordinate space
_originalFrame = [[aView superview] convertRect: aView.frame toView: self];


4. 我读了答案和理解,但我认为最后一个例子是不正确的。根据API文档,视图的中心属性包含视图的父视图坐标系统中的已知中心点。 如果是这样的话,比我想会不会是有意义的尝试,要求父视图的子视图的中心转换子视图坐标系中的值是不是在子视图的坐标系。什么使的感觉是反其道而行之,即从父视图坐标系统到一个子视图的转换... 你可以做到这一点有两种方式(两者都应该得到的值):

CGPoint centerInSubview = [subview convertPoint:subview.center fromView:subview.superview];

CGPoint centerInSubview = [subview.superview convertPoint:subview.center toView:subview];

难道我路要走理解这应该是如何工作的?
5. 这篇文章在我的情况下适用。希望这将有助于其他读者的未来。 视图只能看到它的子和家长的views。它不能看到它的祖父母或孙子女的views。 所以,在我的情况,我有叫self.view隆重父视图,在此self.view我添加的子视图称为 self.child1OfView,self.child2OfView。在self.child1OfView,我已经添加的子视图称为 self.child1OfView1,self.child2OfView1。现在,如果我物理移动self.child1OfView1到 self.child1OfView的border以外的区域对self.view商榷的位置,然后到计算器self.view内的 self.child1OfView1新的位置:

CGPoint newPoint = [self.view convertPoint:self.child1OfView1.center fromView:self.child1OfView];


6. 一个更重要的一点这些API。请确保矩形之间的父视图链要转换和到/从视图。 例如-aView,示例BView和CView中- aView是示例BView的子视图 我们要转换aView。到的CView 如果我们尝试之前示例BView已新增为CView中的子视图来执行,我们会得到一个双层的响应。不幸的是没有内置到这种情况的保护。这似乎却是要知道的情况下转换经过一个漫长的父母链。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值