[SwiftUI] position と offset

SwiftUI

     

TAGS:

⌛️ 2 min.

SwiftUIで、要素を配置するときに、offset と position を使って位置を指定することができます。

知りたいこと:position と offset に違いはあるか?

もちろん、違いはあるんでしょうけど、どんな影響があるのか調べてみました。

テキストを表示して調べてみました。

Text表示

テキストを表示するコード


import SwiftUI

struct ContentView: View {
    var body: some View {
        Text("Hello, World!")
            .background(Color.red)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

offset

表示位置を移動させることができる modifier です。

Offset での移動後にもBackgroundを使って背景色を変えると効果がわかりやすいです。

Offset

offsetを使ったコード


import SwiftUI

struct ContentView: View {
    var body: some View {
        Text("Hello, World!")
            .background(Color.red)
            .offset(x: 100, y: 200)
            .background(Color.orange)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

offset の考察

Offset は、そこまでの結果の表示位置を変更することがわかります。ですので、そこまでに作成されたテキスト(Hello, World!)や背景色(赤)は移動して描画されますが、offset 後に指定された背景色(オレンジ)は、移動されずに残ります。

position

Positionで移動させてみましょう。

Positionで指定

positionで位置指定するコード


import SwiftUI

struct ContentView: View {
    var body: some View {
        Text("Hello, World!")
            .background(Color.red)
            .position(x: 120, y: 50)
            .background(Color.blue)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

position の考察

背景が青一色になることから、position は、与えられた領域をできる限り大きく使うことがわかります。

ですので、position 指定以降は、そのサイズを取得しても、テキストのサイズは取れないことになります。

position と offset を両方使ってみる: offset -> position

実際には、あまり使わないと思いますが、両方つかってどうなるかみてみました。
offset -> position の順で使ってみました。

Offset Position

offset -> position順で指定したコード


import SwiftUI

struct ContentView: View {
    var body: some View {
        Text("Hello, World!")
            .background(Color.red)
            .offset(x: 100, y: 200)
            .background(Color.orange)
            .position(x: 120, y: 50)
            .background(Color.blue)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

offset -> position 順での考察

positionで位置指定されたところから、offsetされることがわかります。

position と offset を両方使ってみる: position -> offset

今度は、position 指定した後に、offset してみます。

position -> offset”></p>
<h3 id=position -> offset 順での考察

position が最初に適用されているため、背景色がオレンジ、青共に画面いっぱいに広がっています。

テキストとともに、画面いっぱいに作られたオレンジが、offset 指定で表示位置を変更され、その後背景を青にしていることが、わかります。

わかったこと:position は、利用可能領域を埋める

Position は利用可能領域を埋めて表示しますし、offset は、表示位置を移動させますが、表示領域を拡張することはしません。

このあたりの差異が、使い分けるときのポイントな気がします。

SwiftUI 学習におすすめの本

SwiftUI 徹底入門

SwiftUI は、グラフィカルなライブラリということもあり、文字だけのテキストよりは、画像が多く入れられた書籍を読むと理解が進みやすいです。

自分で購入した中でおすすめできるものとしては、以下のものです。

2019 年発表の SwiftUI 1.0 相当を対象にしているので、2020/2021 に追加された一部の機能は、説明されていません。

ですが、SwiftUI 入門書としては、非常によくできていますし、わかりやすいです。 この本で学習した後に、追加分を学習しても良いと思います。

SwiftUIViewsMastery

英語での説明になってしまいますが、以下の本もおすすめです。

1ページに、コードと画面が並んでいるので、非常にわかりやすいです。

View に適用できる modifier もわかりやすく説明されているので、ビューの理解だけではなく、どのような装飾ができるかも簡単にわかります。

超便利です

SwiftUIViewsMastery

販売元のページは、こちらです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です