スクリーンショット_2019-12-16_16

【Xcode】超初心者のためのSwiftUIチュートリアル3

【Xcode】超初心者のためのSwiftUIチュートリアル1
【Xcode】超初心者のためのSwiftUIチュートリアル2」の続きです。

今回は「Creating and Combining Views(ビューの作成と結合)」のセクション4「Customize the Text View(カスタム画像ビューを作成する)」とセクション5「Use UIKit and SwiftUI Views Together(UIKitビューとSwiftUIビューを一緒に使用する)」を進めていきます。

Appleの公式チュートリアルはこちらを参照してください。日本語で閲覧したい方は、自動翻訳機能のあるGoogleChromeなどのブラウザを使用するといいでしょう。

1.セクション4/ダウンロードファイルから画像をコピー

プロジェクトフォルダの中の青いフォルダ「Assets.xcassets」を開きます。Finderでチュートリアルページからダウンロードしたファイル(CreatingAndCombiningViews)の中のResources フォルダを開き、画像(turtlerock.jpg)をコピーします。下の図のように、Assets.xcαssetsをクリックして開いた空欄の中に画像ファイルをドラッグしていきます。

CreatingAndCombiningViews > Resources > turtlerock.jpg(画像ファイル)
スクリーンショット 2019-12-27 17.11.54

コピーできると下のようになります。

スクリーンショット 2019-12-27 17.11.33

2.画像を作るためのSwiftUI Viewファイルを作る

次に新しいSwiftUI Viewを作成します。作った画像を他のページで使い回せる「カスタムイメージビュー」として扱うためです。まず左上の「File」からFile>New>File...と選んでいきます。

スクリーンショット 2019-12-27 16.31.31

SwiftUI Viewを選んでNextをクリックします。上のSwift Fileと間違えやすいので注意しましょう。

スクリーンショット 2019-12-27 16.31.51

※基本的に「Sourse」カテゴリはコードを書くファイル、下の「User Interface」カテゴリは表示画面を作るファイルです。

CircleImage.swiftとファイル名を入力したら、保存先を確認してCreateをクリックします。

スクリーンショット 2019-12-27 16.33.14

3.イメージ画像を表示する

編集画面の左側にあるファイル一覧から作成した「CircleImage.swift」を選び、コードを入力しましょう。入力方法は下図のようにアイテム一覧からドラッグ&ドロップする方法、またはコードを直接書く方法の2通りがあります。コードがシンプルなので直接書いた方が早いかもしれませんが、ここではアイテムの場所を確認するため、主にドラッグ&ドロップで進めていきます。

スクリーンショット 2019-12-30 7.46.15

最初にbodyの中にImage("turtlerock")と入力します。入力すると、右側のプレビュー画面中央に画像が表示されます。

スクリーンショット 2019-12-27 16.35.43

4.画像を加工する

この画像を加工していきます。アイテム一覧から丸く切り抜く「ClipShape」を選んでドラッグ&ドロップします。

スクリーンショット 2019-12-27 16.42.54

さらに画像の上に重ねるoverlayを設定します。ClipShapeの下へ書き込んでいきます。

スクリーンショット 2019-12-27 16.47.03

overlayの設定を書き込んでいきます。overlayの( )内にCircle()と枠を描くStrokeを追加します。

スクリーンショット 2019-12-27 16.48.32

Strokeの中身は下のように書いていきましょう。色はグレーで枠の幅を4に指定します。

スクリーンショット 2019-12-27 16.59.43

さらにShadowで陰影を追加します。

スクリーンショット 2019-12-27 16.59.14

radiusは10にしましょう。陰影ができたら枠線の色をwhiteにして、イメージ画像の完成。

スクリーンショット 2019-12-29 15.48.06

このCircleImageをさまざまなビューで使い回していきます。

import SwiftUI

struct CircleImage: View {
   
   var body: some View {
       Image("turtlerock")
           .clipShape(Circle())
           .overlay(
               Circle().stroke(Color.white, lineWidth: 4))
           .shadow(radius: 10)
   }
}

struct CircleImage_Previews: PreviewProvider {
   static var previews: some View {
       CircleImage()
   }
}

5.セクション5/地図を表示するMapViewファイルを作成

次はセクション5です。ここでは地図(マップビュー)を表示するファイルを作成していきます。

上記のCircleImageと同様、左上のFile>New>File...でiOSのSwiftUI Viewを選択し、ファイル名を「MapView.swift」にして作成します。

スクリーンショット 2019-12-30 9.24.23

6.MapKitフレームワークを追加する

作成したMapViewファイルを開いたら、下記のようにコードを書き込みます。コードを書くときはできるだけ予測変換を活用しましょう。タイプミスが少なくなります。

スクリーンショット 2019-12-30 9.25.39

MapKitは地図を扱うためのフレームワーク(あらかじめ用意された機能のセット)です。こう書くことで、地図機能をファイル内で使えるようになります。

7.地図を呼び出すためのコードを追加する

最初から入っていた「var body:〜」のコードを削除します。

スクリーンショット 2019-12-30 11.01.04

削除したところに下の枠内のコードを置き換えましょう。あらかじめ用意されているスニペットを使う(後述)と、少し手間が省けます。

スクリーンショット 2019-12-30 9.31.36

このコードは「中身のない空のMapViewを用意する」というメソッド(操作)です。

スニペット(短いコード)はアイテムボックスに登録されています。リストから「Function Statement」をドラッグして、必要なコードを書き込みます。

スクリーンショット 2019-12-30 9.27.35

スクリーンショット 2019-12-30 9.27.52

8.地図の座標と表示領域を設定する

次に、表示するマップの座標と表示する領域を設定していきます。下記のように書いていきましょう。予測変換を使えば効率的です。

スクリーンショット 2019-12-30 12.25.02

ここは読みとばしても結構ですが、一応コードの意味についてざっくりと
書いておきましょう。これは地図表示の中身を指定するメソッドです。

coordinate は座標です。「turtlerock」のあるジョシュアツリー国立公園の位置を緯度(latitude)・経度(longitude)で示しています。

span
は地理的な範囲の大きさを指定します。マップ領域の高さと幅を、緯度の度数で示しています(latitudeDeltaは1.0で111キロメートル)。数値が大きくなるほど広い範囲を表示します。

region
は座標の中心(center)をcoordinate、表示範囲の大きさ(span)をspanとして表示領域を規定しています。

view.setRegion(region, animated: true)は「regionで規定された領域をビューに表示する」という命令です。

func updateUIViewで座標と表示する広さを決めて地図の表示領域を確定し、それをfunc makeUIViewで用意した空のビューに表示する、という流れです。

これで一通りコードを書きました。プレビューでデバイスの右下にあるアイコンをクリックして「ライブプレビュー」に切り替えると地図が表示されます。新しい画面に自動的に切り替わらない場合は、プレビューの右上にある「Resume」をクリックしてください。

スクリーンショット 2019-12-30 12.12.24

下がコード全体と地図表示のプレビューです。

スクリーンショット 2019-12-30 9.41.22

コードは下の通りです。

import SwiftUI
import MapKit

struct MapView: UIViewRepresentable {
   
   func makeUIView(context: Context) -> MKMapView {
       MKMapView(frame: .zero)
   }

   func updateUIView(_ view: MKMapView, context: Context) {
       let coordinate = CLLocationCoordinate2D(
           latitude: 34.011286, longitude: -116.166868)
       
       let span = MKCoordinateSpan(latitudeDelta: 2.0, longitudeDelta: 2.0)
       
       let region = MKCoordinateRegion(center: coordinate, span: span)
       
       view.setRegion(region, animated: true)
   }

}


struct MapView_Previews: PreviewProvider {
   static var previews: some View {
       MapView()
   }
}

次回はセクション6を解説していきます。

【Xcode】超初心者のためのSwiftUIチュートリアル1
【Xcode】超初心者のためのSwiftUIチュートリアル2




この記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。

*\(^o^)/*
2
40代にしてプログラミングの勉強を始めました。swiftやmicro:bitについてあれこれ書いていきます。時々3Dプリンターについてもメモします。
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。