見出し画像

[SwiftUI] Modifierを使ってみる

SwiftUIのビューをカスタマイズするためのメソッド(font, frame, borderなど)をモディファイア(Modifier)と言います😀

メソッドチェーンのように複数のモディファイアをつないで記述できます。
たとえば、フォントを大きくして、テキストを赤色に変更したい場合はこのように記述できます。

var body: some View {
   Text("Hello World")
       .font(.largeTitle)
       .foregroundColor(Color.red)
}

スクリーンショット 2020-09-16 21.11.28


今日は、Imageビューを使っていくつかモディファイアを試してみたいと思います🙂

clipped

frameからはみ出した部分を切り取るモディファイア

Imageビューにframeをつけても、frameの大きさより画像が大きかった場合、このようにはみ出してしまいます。
※黒い枠がframeのサイズです。

var body: some View {
   Image("swift")
       .frame(width: 250, height: 250)
       .border(Color.black)
}

スクリーンショット 2020-09-16 22.42.42

そこで、clippedを使用するとframe枠におさまるように、はみ出た部分を切り取ってくれます。

var body: some View {
   Image("swift")
       .frame(width: 250, height: 250)
       .border(Color.black)
       .clipped()
}

スクリーンショット 2020-09-16 22.47.52

clipShape

切り取りの形状を設定できるモディファイア

clippedと同じく、Imageビューを切り取ってくれるモディファイアです。
clipShapeでは切り取り形状を円形や丸四角などに設定できます。

var body: some View {
   Image("swift")
       .frame(width: 250, height: 250)
       .clipShape(Circle())
}

スクリーンショット 2020-09-16 22.56.58

Shapeには以下の種類を設定できます。
Capsule - カプセル型
Ellipse - 楕円形
Path - 任意のパスに合わせて描画する
Rectangle - 四角
RoundedRectangle - 角丸四角

mask

引数に設定されたビューを使って切り抜く​

次の画像に対して、"Hello Swift!!"というTextビューでmaskしてみます。

画像9

var body: some View {
   Image("swift")
       .mask(
           Text("Hello Swift!!")
               .font(.largeTitle)
               .fontWeight(.black)
               .frame(width: 300, height: 300))
}

スクリーンショット 2020-09-16 23.19.11

maskに使用したTextビューの部分だけ、画像が表示されています🎉

maskには画像も使用できます。
↓のような背景を透過させた画像(swift_text.png)を用意します。

画像11

maskにswift_textを指定します。

var body: some View {
   Image("swift")
       .mask(
           Image("swift_text"))
}

スクリーンショット 2020-09-16 23.31.27

マスクできました🎉

おまけ

ポップアップメニューからモディファイアを追加することもできます!
commandを押しながらビューをクリックすると、メニューが表示されます。

スクリーンショット 2020-09-16 21.54.23

Show SwiftUI Inspector...を選択します

スクリーンショット 2020-09-16 21.57.03

このメニューからFontやColor、Paddingなどのモディファイアを追加することができます。

FrameのWidthに200と入れてみます。
すると、ソースコードにもモディファイアが自動的に追加されます🎉

スクリーンショット 2020-09-16 21.59.38


この記事が気に入ったらサポートをしてみませんか?