iOS: происхождение UIView по отношению к UIWindow

#iphone #ios #cocoa-touch #uiview #uiviewcontroller

#iPhone #iOS #cocoa-touch #uiview #uiviewcontroller

Вопрос:

Происхождение UIView содержится в его свойствах фрейма или границ по отношению к его супервизору. Допустим, я хочу сделать что-то, что вместо этого использует происхождение UIView по отношению к UIWindow. Должен ли я проходить каждый шаг вверх по иерархии, чтобы произвести это вычисление, или есть более простой и прямой способ?

Комментарии:

1. Что именно вы хотите сделать с представлением? Вы говорите о касании / перетаскивании его?

2. Я хочу создать другой способ отображения пользовательского изображения. В принципе, я хочу, чтобы пользователь мог нажать на изображение, а затем заставить его занять весь экран, чтобы показать изображение, и когда пользователь закончит, он восстановит UIView таким, каким он был. Имеет ли смысл мое описание?

3. Возможно, вам будет проще просто создать другое представление, занимающее весь экран, и показывать изображение в этом представлении. Вы можете решить, как вы хотите представить это представление (скрыть / не показывать или анимировать, например), не изменяя исходный вид или поведение исходного представления. Тогда вам просто нужен некоторый код для управления этим новым представлением, который не зависит от кода, управляющего исходным представлением.

Ответ №1:

Я думаю, вы ищете этот метод

Точка преобразования: toView

Ответ №2:

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

[AView convertRect:AView.frame для просмотра: [экран UIWindow]]

Этот метод находится в ссылке на класс UIView

Комментарии:

1. примечание: происхождение — это точка (CGPoint). Итак, использовать convertPoint метод закончено

2. Упс! Я пропустил это. Вы определили правильный метод. Используйте приведенную выше форму с convertPoint вместо convertRect.

Ответ №3:

Лучший и самый простой способ сделать это — использовать convertPoint:toView или convertRect:toView на UIWindow . Чтобы сделать это правильно, вам необходимо предоставить представление, окно которого соответствует окну представления, координаты которого вы пытаетесь преобразовать.

Для вашего вопроса вам нужно знать происхождение представления относительно его местоположения в окне. К счастью, вам не нужно знать окно, чтобы получить это. Согласно документации UIView методов convert:to .

Представление, в точку системы координат которого необходимо преобразовать. Если view равен нулю, этот метод вместо этого преобразует в базовые координаты окна. В противном случае и view, и receiver должны принадлежать одному и тому же объекту UIWindow.

Это означает, что вы можете просто предоставить nil то, что вам нужно!

В Swift:

let pointInWindow = yourView.convert(.zero, to: nil)

В Objective-C:

CGPoint pointInWindow = [yourView convertPoint:CGPointZero toView:nil];