當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Swift Never coordinateSpace(name:)用法及代碼示例


實例方法

coordinateSpace(name:)

為視圖的坐標空間分配一個名稱,以便其他代碼可以對相對於命名空間的點和大小等維度進行操作。

聲明

func coordinateSpace<T>(name: T) -> some View where T : Hashable

參數

name

用於標識此坐標空間的名稱。

詳述

使用coordinateSpace(name:) 允許另一個函數查找和操作視圖,並操作相對於該視圖的維度。

下麵的示例演示了嵌套視圖如何查找和操作其封閉視圖的坐標空間:


struct ContentView: View {
    @State var location = CGPoint.zero


    var body: some View {
        VStack {
            Color.red.frame(width: 100, height: 100)
                .overlay(circle)
            Text("Location: \(Int(location.x)), \(Int(location.y))")
        }
        .coordinateSpace(name: "stack")
    }


    var circle: some View {
        Circle()
            .frame(width: 25, height: 25)
            .gesture(drag)
            .padding(5)
    }


    var drag: some Gesture {
        DragGesture(coordinateSpace: .named("stack"))
            .onChanged { info in location = info.location }
    }
}

在這裏,名為“stack” 的ContentView 中的VStack 由一個紅框組成,其中心有一個自定義的Circle 視圖View/overlay(_:alignment:)

circle 視圖有一個附加的DragGesture,它以封閉的 VStack 的坐標空間為目標。由於手勢識別器的關閉在 circle 中注冊事件,它將它們存儲在共享的 location 狀態變量中,並且 VStackText 視圖中顯示坐標。

可用版本

iOS 13.0+, iPadOS 13.0+, macOS 10.15+, Mac Catalyst 13.0+, tvOS 13.0+, watchOS 6.0+

相關用法


注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 Never coordinateSpace(name:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。