Pie*_*ult 9 iphone cocoa-touch objective-c uikit ipad
我一直在使用这种方法,但从未真正了解它们的行为方式.
每当我尝试使用它们时,我发现自己在黑暗中探索,因为我尝试了不同的方面,它似乎永远不会按照我的期望去做.
为了争论,我试图转换我从UIKeyboard的通知中得到的帧.
在横向模式下,我得到了这个NSRect:
UIKeyboardFrameEndUserInfoKey = NSRect: {{406, 0}, {362, 1024}}
Run Code Online (Sandbox Code Playgroud)
现在我想将它转换为正确的矩形(交换x/y,宽度和高度),所以我这样做
CGRect compatibleRect = [self convertRect:[[[notif userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue] toView:nil];
Run Code Online (Sandbox Code Playgroud)
但是矩形成为:
compatibleRect = CGRect: {{406,406}, {362, 1024}}
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激 :)
Elf*_*red 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}}
归档时间: |
|
查看次数: |
17913 次 |
最近记录: |