Как - (CGRect) convertRect: (CGRect) прямоугольник toView: (UIView *) просмотр работы - PullRequest
9 голосов
/ 01 августа 2010

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

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

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

Любая помощь будет оценена :)

1 Ответ

13 голосов
/ 01 августа 2010

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

У вас есть два подпредставления в вашем окне, одно с рамкой {{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}}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...