我一直在使用这种方法,但从未真正理解他们的行为方式。
每当我尝试使用它们时,我发现自己在黑暗中探索,因为我尝试了不同的方面,它似乎永远不会按照我的期望去做。
为了争论,我正在尝试转换我从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}}
任何帮助将不胜感激:)
答案 0 :(得分:13)
你错了。它基本上进行坐标转换。我假设它首先将rect从起始视图转换为窗口坐标,然后从窗口坐标转换回第二个视图的坐标系。这是一个例子。
您的窗口中有两个子视图,一个的框架为{{25,0},{100,100}},另一个的框架为{{50,50},{200,200}}您想要将以下rect {{50,50},{50,50}}从第一个子视图转换为第二个子视图。以下是它的工作原理。
将rect从第一个子视图的协调转换为窗口坐标: 由于我们开始的子视图具有{25,0}的原点,我们需要将其转换为窗口坐标。这可以通过将子视图的原点添加到rect的原点来完成,因此窗口坐标中的新rect是{{75,50},{50,50}}
将新的rect从窗口坐标转换为第二个子视图的坐标:我们从rect {{75,50},{50,50}}开始,第二个子视图的帧是{{50,50 },{200,200}}。现在我们将第二个子视图的原点减去rect来进行翻译。所以我们最终得到了{{25,0},{50,50}}的翻译矩形