Viewを拡大・縮小させるscaleEffectの使い方を解説します。
このModifierは、描画された結果を拡大/縮小しているので、あまり拡大しすぎるとジャギーが目立つ場合があります。
環境
この記事の情報は次のバージョンで動作確認しています。
【Xcode】11.4.1
【Swift】5.2
【iOS】13.4.1
【macOS】Catalina バージョン 10.15.4
【Swift】5.2
【iOS】13.4.1
【macOS】Catalina バージョン 10.15.4
基本的な使い方
1 2 3 |
scaleEffect(CGFloat) |
Viewを自らの中心を起点にして拡大・縮小させます。
引数(引数名無し)で倍率を指定します。1.0がオリジナルサイズ、2.0で2倍、3.0で3倍のサイズです。
1.0未満の数値を指定すると縮小となり、マイナス値を指定すると反転します。
使用例
スライダーでサイズを動的に変更する例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import SwiftUI struct ContentView: View { @State private var ratio: CGFloat = 1.0 // 拡大率 var body: some View { ZStack { /// タイトルプレート表示 Text("カピ通信") .font(.title) .padding() .background(Color.green) .scaleEffect(ratio) // 拡大率の指定 /// スライダーで拡大率変更 VStack { Spacer() Text("拡大率:\(ratio, specifier: "%.2f")") Slider(value: $ratio, in: -3.0...5.0) }.padding() } } } |
縦と横の拡大比率を変える
1 2 3 |
scaleEffect(x: CGFloat, y: CGFloat) |
縦と横の拡大比率を別々に指定して、サイズ変更します。
引数(x)が水平方向、引数(y)が垂直方向の拡大率です。
使用例
X軸、Y軸の拡大率をスライダーで動的に変更する例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
import SwiftUI struct ContentView: View { @State private var ratioX: CGFloat = 1.0 // 拡大率(X軸) @State private var ratioY: CGFloat = 1.0 // 拡大率(Y軸) var body: some View { ZStack { /// タイトルプレート表示 Text("カピ通信") .font(.title) .padding() .background(Color.green) .scaleEffect(x: ratioX, y: ratioY) // 拡大率の指定 /// 拡大率調整 HStack { VStack { Spacer() Text("拡大率(X軸):\(ratioX, specifier: "%.2f")") Slider(value: $ratioX, in: -3.0...5.0) }.padding() VStack { Spacer() Text("拡大率(Y軸):\(ratioY, specifier: "%.2f")") Slider(value: $ratioY, in: -3.0...5.0) }.padding() } } } } |
基準点の変更
1 2 3 4 |
scaleEffect(CGFloat, anchor: UnitPoint) scaleEffect(x: CGFloat, y: CGFloat, anchor: UnitPoint) |
拡大・縮小の起点となる基準点を引数(anchor)にUnitPoint構造体で指定します。
デフォルトの基準点は.center(中央)です。
使用例
Viewの左下を起点に拡大した例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import SwiftUI struct ContentView: View { var body: some View { ZStack { /// 拡大サイズ Text("カピ通信") .font(.largeTitle) .padding() .background(Color.green) /// Viewの左下を起点に拡大 .scaleEffect(2.0, anchor: .bottomLeading) /// 標準サイズ Text("カピ通信") .font(.largeTitle) .padding() .background(Color.blue) } } } |
あわせて読みたい記事
【SwiftUI】Viewの回転(rotationEffect)
指定された点を中心にViewを回転させるrotarionEffectの使い方を解説します。
【SwiftUI】Viewの3D回転(rotation3DEffect)
指定された回転軸を中心に、3次元でViewを回転させるrotation3DEffectの使い方を解説します。
【SwiftUI】UnitPointの使い方
UnitPointはViewの相対的な位置を定義する構造体です。 用途としては、例えばrotationEffectを使ってViewを回転する時の中心点の指定などがあります。