Я хочу сделать фоновый просмотр параллакса, где изображение за пользовательским интерфейсом остается почти неподвижным, когда окно перемещается на экране. Чтобы сделать это в macOS, я хочу получить координаты окна. Как мне получить координаты окна?
Я спрашиваю об этом, потому что нигде не могу найти, где написано, как это сделать:
Поиск в Google, который помог мне найти следующие результаты:
Документация для разработчиков Apple:
GeometryReader
- я надеялся, что это содержит API, чтобы дать мне кадр в системном координатном пространстве, но, похоже, все подходы, которые он содержит, включают только ссылку в пределах координат окна - Создание приложения MacOS - SwiftUI Tutorials - I Я надеялся, что Apple упомянула бы об этом, но это совсем не упоминается, не говоря уже о том, что вы можете предварительно просмотреть содержимое главного окна на панели предварительного просмотра Xcode
- Бесполезный поиск: Координаты окна SwiftUI , Расположение окна SwiftUI , Окно SwiftUI get frame
Другие вопросы SO:
- Как получить доступ к собственному окну в представлении SwiftUI? - I Я был оптимистичен c, чтобы получить ответ, который дал бы мне SwiftUI API для доступа к окну, но вместо этого он использует оболочку для доступа к представлению окна AppKit.
- Определите размер окна macOS с помощью SwiftUI - Подобные надежды, как и в предыдущем вопросе, но на этот раз ответом было просто прочитать кадр представления содержимого, который всегда имеет
(0, 0)
origin - SwiftUI координатное пространство - Я надеялся, что этот ответ даст мне знать, как преобразовать координаты, заданные
GeometryReader
, в экранные координаты, но, к сожалению, координаты снова ограничены в пределах window
В других местах в Интернете:
- SwiftUI для Ma c - часть 2 от TrozWare - Я надеялся, что это даст мне несколько советов по использованию SwiftUI на Ma c, например, по взаимодействию с windows, так как большинство уроков сосредоточено на iOS / iPadOS. К сожалению, хотя он содержит много полезной информации о том, как SwiftUI работает с windows, он не располагает информацией ни о взаимодействии, ни о синтаксическом анализе этих windows, самих себя
- SwiftUI Layout System от Александр Гребенюк - надеялся на расположение окон на экране, но это все для полноэкранных iOS приложений
- SwiftUI по примеру по Взлом с Swift - надеялся получить пример того, как получить положение окна, но кажется, что windows на самом деле вообще не упоминается в перечисленных примерах
Как я перечислил, я обнаружил, что все это либо не относится к моей проблеме, либо ссылается только на координаты в окне, но не на координаты окна на экране. Некоторые упоминают способы окунуться в AppKit, но я хочу избежать этого, если это возможно.
Самое близкое, что я получил, пыталось использовать GeometryReader
как это:
GeometryReader { geometry in
Text(verbatim: "\(geometry.frame(in: .global))")
}
, но источник всегда был (0, 0)
, хотя размер менялся, когда я настраивал окно.
То, что я предполагал, было примерно таким:
public struct ParallaxBackground<Background: View>: View {
var background: Background
@Environment(\.windowFrame)
var windowFrame: CGRect
public var body: some View {
background
.offset(x: windowFrame.minX / 10,
y: windowFrame.minY / 10)
}
}
, но \.windowFrame
нет не реально; он не указывает на какой-либо путь к ключу на EnvironmentValues
. Я не могу найти, где я мог бы получить такое значение.