簡體   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