以前、SwiftUIでテキストを配置したり色を変更したりしました
今回は画像にいろいろ手を加えるというのをSwiftUIで試してみたいと思います
まずはリソース(画像)を追加します
この画像を表示させるためにはImageの引数に画像のリソース名を指定すれば表示されます
少し見にくいかもしれないですが、画像をクリックして見てみてください!
上記はシンプルに画像を表示させていますが、変化を加えるのも可能です
struct IconImageView: View { var body: some View { Image("Icon") .resizable() .clipShape(Circle()) } }
resizable()
で画像サイズをフレームサイズに合わせて、.clipShape(Circle())
で画像を円形にします
また、枠線と影をつけることができます
struct IconImageView: View { var body: some View { Image("Icon") .resizable() .clipShape(Circle()) .overlay(Circle().stroke(Color.blue, lineWidth: 4)) .shadow(radius: 10) } }
こうすることで、青色の枠線と影を画像に追加することができました
さらにフレームのサイズは変更できるので、画像がはみ出てしまうのもうまく調整できます
struct IconImageView: View { var body: some View { Image("Icon") .resizable() .clipShape(Circle()) .overlay(Circle().stroke(Color.blue, lineWidth: 4)) .shadow(radius: 10) .frame(width: 300, height: 300) } }
frame(width: 300, height: 300)
というようにwidthとheightを指定できるので、プレビューを見ながらうまい具合に調節できます
ちなみにはみ出してしまった分は.clipped()
を使うことにより、切り取ることも可能です
HTML・CSSを触っている感覚に何度か陥りました!
では、画像とテキストの組み合わせはどうするでしょうか??
SwiftUIのbody propertyは単一のviewしか返さないので複数のviewを扱うためにStack
を使います
VStack
とHStack
はそれぞれ垂直と水平方向、あるいは前後に組み合わせてStackに組み入れグループ化することができます
struct IconImageView: View { var body: some View { Image("Icon") .resizable() .clipShape(Circle()) .overlay(Circle().stroke(Color.blue, lineWidth: 4)) .shadow(radius: 10) .frame(width: 300, height: 300) Text("Hello World") .font(.largeTitle) .foregroundColor(Color.red) } }
上記はエラーになるパターンです
Image
とText
という2つのViewがあり、bodyの戻り値がViewのためエラーが発生します
なので、Vstack
で囲ってあげれば解消されます
struct IconImageView: View { var body: some View { VStack { Image("Icon") .resizable() .clipShape(Circle()) .overlay(Circle().stroke(Color.blue, lineWidth: 4)) .shadow(radius: 10) .frame(width: 300, height: 300) Text("Hello World") .font(.largeTitle) .foregroundColor(Color.red) } } }
画像の取り扱いはここまでとします
以前取り上げたテキストの表示と組み合わせることで最低限のUIは作れるのではないかと感じました
ただ、実務レベルとなると。。。もう少し時間がかかりそうな気がしました