元のドキュメント: developer.apple.com/documentation/swiftui/shapestyle/in(_:)


インスタンスメソッド


in(_:)


形状スタイルの単位空間座標を、与えられた長方形の絶対座標にマッピングします。


iOS 13.0+ iPadOS 13.0+ macOS 10.15+

tvOS 13.0 VisionOS 1.0+ WatchOS 6.0+

func `in`(_ rect: CGRect) -> some ShapeStyle





パラメータ


rect

形状スタイルをマッピングする絶対座標を与える長方形。



戻り値


rect で与えられた座標にマッピングされた新しい形状スタイル。



議論


形状スタイルによっては、UnitPoint 座標に基づいた位置によって色やパターンが変化するものがあります。例えば、 topbottom を始点と終点として LinearGradient を作成できます。


let gradient = LinearGradient(
    colors: [.red, .yellow],
    startPoint: .top,
    endPoint: .bottom)

このようなスタイルをレンダリングする際、SwiftUI は単位空間座標を塗りつぶされた形状の絶対座標にマッピングします。しかし、in(_:) メソッドに長方形を指定することで、SwiftUI に別の座標セットを使用するように指示できます。上記で定義したグラデーションを使用した、サイズ変更可能な 2 つの長方形を考えてみましょう。


HStack {
    Rectangle()
        .fill(gradient)
    Rectangle()
        .fill(gradient.in(CGRect(x: 0, y: 0, width: 0, height: 300)))
}
.onTapGesture { isBig.toggle() }
.frame(height: isBig ? 300 : 50)
.animation(.easeInOut)

isBigtrue の場合(これは別の場所で privateState 変数として定義されている)、長方形の高さが変更されたグラデーションの高さと一致するため、長方形は同じように見えます。



ユーザーが HStack をタップして isBig をトグルすると、長方形は縮小しますが、グラデーションはそれぞれ異なる反応を示します。



SwiftUI は、最初の矩形のグラデーションを新しいフレームの高さに合わせて再マッピングするため、より小さな領域でも色の範囲全体が表示されます。2 番目の矩形については、変更されたグラデーションは元の高さにマッピングされたままなので、全体のグラデーションのごく一部しか表示されません。アニメーションを使用すると、この違いを視覚的に理解できます。














トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ