Как делает - (CGRect) convertRect: (CGRect) rect toView: (UIView *), просматривают работу

Я использовал такие методы на и прочь но никогда действительно понял, как они вели себя.

Каждый раз, когда я пытаюсь использовать их, я ввожу по абсолютному адресу в темноте, поскольку я пробую другой аспект, и это никогда, кажется, не делает то, к чему я ожидаю это.

Ради аргумента я пытаюсь преобразовать кадр, который я получаю из уведомления 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}}

Любая справка ценилась бы :)

9
задан Peter Hosey 1 August 2010 в 20:15
поделиться

1 ответ

Вы неправильно его используете. Он в основном выполняет преобразование координат. Я предполагаю, что он начинается с преобразования прямоугольника из начального представления в координаты окна, а затем обратного преобразования из координат окна в систему координат второго представления. Вот пример.

В вашем окне есть два подпредставления, одно с рамкой {{25,0}, {100, 100}}, второе с рамкой {{50, 50}, {200, 200}} Вы хотите перевести следующий прямоугольник {{50, 50}, {50, 50}} из первого подпредставления во второе подпредставление. Вот как это могло бы работать.

  1. преобразовать прямоугольник из скоординированного первого подвида в координаты окна: Поскольку начальная точка субпредставления, с которой мы начинаем, равна {25,0}, нам необходимо преобразовать ее в координаты окна. Это можно сделать, добавив начало субпредставления к началу прямоугольника, так что новый прямоугольник в координатах окна будет {{75, 50}, {50, 50}}

  2. преобразовать новый прямоугольник из координат окна в координаты второго подчиненного представления: мы начинаем с прямоугольника {{75, 50}, {50, 50}}, фрейм второго подчиненного представления равен {{50, 50}, {200, 200}}. Теперь мы вычитаем исходную точку второго подпредставления из прямоугольника, чтобы выполнить перевод. Таким образом, мы получаем преобразованный прямоугольник {{25, 0}, {50, 50}}

13
ответ дан 4 December 2019 в 15:11
поделиться