繁体   English   中英

怎么做 - (CGRect)convertRect:(CGRect)rect toView:(UIView *)查看工作

[英]How does - (CGRect)convertRect:(CGRect)rect toView:(UIView *)view work

我一直在使用这种方法,但从未真正了解它们的行为方式。

每当我尝试使用它们时,我发现自己在黑暗中探索,因为我尝试了不同的方面,它似乎永远不会按照我的期望去做。

为了争论,我试图转换我从UIKeyboard的通知中得到的帧。

在横向模式下,我得到了这个NSRect:

UIKeyboardFrameEndUserInfoKey = NSRect: {{406, 0}, {362, 1024}}

现在我想将它转换为正确的矩形(交换x / y,宽度和高度),所以我这样做

CGRect compatibleRect = [self convertRect:[[[notif userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue] toView:nil];

但是矩形成为:

compatibleRect = CGRect: {{406,406}, {362, 1024}}

任何帮助,将不胜感激 :)

你错了。 它基本上进行坐标转换。 我假设它首先将rect从起始视图转换为窗口坐标,然后从窗口坐标转换回第二个视图的坐标系。 这是一个例子。

您的窗口中有两个子视图,一个的框架为{{25,0},{100,100}},另一个的框架为{{50,50},{200,200}}您要翻译从第一个子视图到第二个子视图的以下rect {{50,50},{50,50}}。 这是它的工作原理。

  1. 将rect从第一个子视图的协调转换为窗口坐标:由于我们开始的子视图的原点为{25,0},我们需要将其转换为窗口坐标。 这可以通过将子视图的原点添加到rect的原点来完成,因此窗口坐标中的新rect是{{75,50},{50,50}}

  2. 将新的rect从窗口坐标转换为第二个子视图的坐标:我们从rect {{75,50},{50,50}}开始,第二个子视图的帧是{{50,50},{200,200 }}。 现在我们将第二个子视图的原点减去rect来进行翻译。 所以我们最终得到了{{25,0},{50,50}}的翻译矩形

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM