SwiftUI + Lily Playgroundをはじめる : PGScreenViewとPGSceneの使い方

LilySwiftのパッケージを追加すると, Lily Playground Booksの処理とSwiftUIを合わせて使うことができるようになります。以下のサンプルコードをダウンロードして参照してください. 実行環境 Xcode 15.2 LilySwift 5.1.23 サンプルプロジェクト PGScreenView.swiftpm.zip 上記のプロジェクトを開くと, Lily Playgroundが動かせる状態になっています. コードの以下の部分を書き換えてください. ダークグレイの背景に赤の四角が表示されます. Playground Booksと同じ design関数 をつくる screen.clearColor = .darkGrey を指定する PGRectangleのcolorを .red にする コード 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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 import SwiftUI import LilySwiftForPlayground import LilySwiftAlias class Playground { // Metalを使う準備 lazy var device = MTLCreateSystemDefaultDevice()!...

2023-12-19 · 2024-03-21

LilySwift活用

LilySwiftの活用方法について紹介します. LilySwiftの導入 1. Playgrounds(.swiftpm)の場合 1-1. iPadのPlaygroundsでLilySwiftをつかう 1-2. macOSのPlaygroundsでLilySwiftをつかう 1-3. XcodeでswiftpmをつくりLilySwiftをつかう 2. Xcodeプロジェクト(.xcodeproj)の場合 2-1. XcodeプロジェクトでLilySwiftをつかう 3. Lilyの機能を試す 3-1. 画像処理した画像をSwiftUIに表示する 4. 関連情報 4-1. LilySwiftとLilySwiftForPlaygroundの違い SwiftUIでLily Playgroundを使う 1. 導入 1-1. SwiftUI + Lily Playgroundをはじめる : PGScreenViewとPGSceneの使い方 2. SwiftUI + Playground2D 2-1. 2Dで使える画像を増やす 2-2. 2Dで使える最大パーティクル数を変える 2-3. ボタンを押してパーティクルの色を変える

2023-12-03 · 2024-03-21

SwiftApp 書庫

SwiftでのAppサンプルを紹介していきます. RealityKit(iOS/iPadOS) iOSでRealityKitを動作させるサンプルです. swiftpmのサンプルはiPadのPlayground Appでも実行可能です. 1. 物理ベースマテリアル (Physically Based Material) 1-1. Physically Based Material: Box 1-2. Physically Based Material: Sphere 2. ライティングをしないマテリアル (Unlit Material) 2-1. Unlit Material: Box 2-2. Unlit Material: Sphere 3. シンプルマテリアルのカスタマイズ 3-1. テクスチャを適用したBox 3-2. テクスチャを適用したSphere 4. シェーダを使ったマテリアル [※Xcodeのみ] 4-1. プレーンメッシュに円を描く 4-2. プレーンメッシュにボヤけた円を描く 4-3. プレーンメッシュに矩形を描く 4-4. プレーンメッシュに三角を描く 4-5. プレーンメッシュにテクスチャをあてる 4-6. プレーンメッシュを複数描く

2023-11-10 · 2023-11-12

SwiftUI 3-4-1. サーバにJSONをリクエストして非同期に処理する

前節で, リストのデータをJSONファイルに書き出す・読み込む・削除することができるようになりました. またファイルがない場合の初期化処理も取り扱いました. 一方, 昨今のAppではデータをストレージに保存する以外のパターンが多くなりました。つまりネットワークを介してサーバにアクセスし, JSONといったデータを受け取るという方法です. 今回はJSONを返してくれるサーバにデータをリクエストする例を紹介します. SFSwiftUI03-4.swiftpm を開く (サンプルコード) 3-2-5を完了したコードと同様 photos配列は空っぽ Resources/photos.json も存在しない また簡単のため,3-3で作成した追加や削除の機能も省いている コード1 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 import SwiftUI struct ContentView: View { @State var photos:[PhotoData] = [] var body: some View { List { Section { ForEach( $photos ) { bind_photo in NavigationLink( destination:{ SceneryDetail( data:bind_photo ) }, label: { SceneryRow( data:bind_photo....

2023-03-30 · 2024-06-06

SwiftUI 3-4-2. サーバリクエストのコードの改善・例外の対応

前回, サーバにJSONデータをリクエストしてAppで活用する方法を紹介しました. 今回は仕上げとして作成したAPIAccessorのブラッシュアップを行います. 前回のコードに続けて書く APIAccessor.requestPhotos()のエラー処理を行う do { … } catch { … } をつかう. try! を try に置き換えて例外を拾う JSONDecoder().decode に guard letをつかう try! は try? に変更する try? は異常時に例外の代わりにnilを返す. guardなどで判定できるようになる コード1 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 import Foundation class APIAccessor { static func requestPhotos() async -> [PhotoData] { let api_photos = "https://archive....

2023-03-30 · 2023-04-02

SwiftUI 3-2-2. JSONの書き換えとビューの変化

前回で外部のJSONファイルを読み込んでリストに表示することができました. 今後はJSONを書き換えるだけでリストのデータを変えることができます. 今回は3-2-1で作ったプログラムをつかいJSONファイルのみ変更してみます. photos.jsonに情報を追加する (※注1) カンマは値の区切りにつける. 最後の要素の後にはつかないので注意(つけるとエラーになる) (※注2) iPadではphotos.jsonが編集できないので, photos2.jsonを読み込んで試してみてください コード1 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 34 35 36 37 [ { "id": "0", "type": "景色", "imageName": "CC0_01", "title": "景色1", "message": "森と山です" }, { "id": "1", "type": "景色", "imageName": "CC0_04", "title": "景色2", "message": "きれいな湖です" }, { "id": "2", "type": "景色", "imageName": "CC0_06", "title": "景色3", "message": "フィレンツェです" }, { "id": "3", "type": "景色", "imageName": "CC0_07", "title": "景色4", "message": "ひまわりです" }, { "id": "4", "type": "景色", "imageName": "CC0_10", "title": "景色5", "message": "海に日が沈みます" } ] 結果 Swiftのコードには何も加えていませんが、リストにデータが増えたことがわかると思います....

2023-03-28 · 2023-03-28

SwiftUI 3-2-3. JSONの読み込みコードの改善・例外の対応

前々回, 前回で外部のJSONファイルをデータとし, SwiftUIは表示の役割に集中するコードを作ることができました. しかし3-2-1で作成したJSONの読み込みコードは少し作りかたに不安があります. 今回は3-2-1のコードをより良いものにするのが目的です.具体的には以下のことです. 例外処理をきちんと処理する 例外が発生した時にエラーをコンソールに出す Optional(!や?)をきちんと処理する まずは読み込みの関数の改善です. Resource.swiftの load( name: ext: ) の例外処理を行う 処理を do { ~~ } で包む (doの中で発生した例外を拾うようになる) try!は例外を潰してしまう ので, !を外した try に置き換える tryで例外が起きた時の処理を catch { ~~ } に書く catch内ではエラーをコンソールに出すprintを書く データ取得に失敗したので, 空のData()をreturnする コード1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import Foundation class Resource { static func load( name:String, ext:String ) -> Data { do { let url = Bundle....

2023-03-28 · 2023-03-28

SwiftUI 3-3-1. JSONをファイルに書き出す

前節で, App内にあらかじめバンドルさせておいたJSONファイルからPhotoDataを作り, リストに表示することができました. しかしバンドルしたJSONはあくまで読み込み専用で,編集したデータを保持できません. そこで今節ではバンドルではなく自由に読み書きできるストレージを使ってJSONを扱う方法を紹介します. まず準備です. SFSwiftUI03-3.swiftpm を開く (サンプルコード) 03-2を完了したコードと同様 photos配列を空っぽにしている 後で読み込むためのJSONファイルが入っている データがないため, プレビューも何もない状態から始まることを確認 実行結果 コード1 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 34 35 36 37 38 39 40 41 42 43 import SwiftUI struct ContentView: View { @State var photos:[PhotoData] = [] var body: some View { List { Section { ForEach( $photos ) { bind_photo in NavigationLink( destination:{ SceneryDetail( data:bind_photo ) }, label: { SceneryRow( data:bind_photo....

2023-03-28 · 2024-07-28

SwiftUI 3-3-2. JSONファイルを読み込む

前節で, ストレージにJSONファイルを書き込みました. 今回はファイルが正しく書き込みされているか確認する意味も込めてストレージのファイルの読み込み処理を追加します. 前回のコードに続けて書く PhotoDataの中に load( path: )関数 を作成する ファイルが存在するかを FileManager.default.fileExists( atPath: ) で確認 ファイルがない場合は空の配列を返すようにする URL( fileURLWithPath:path ) で読込パスをURLに変換する try! Data( contentOf:url ) でファイルを読み込む 3-02で作成済みの PhotoData.parse( json: ) で[PhotoData]に変換して返す コード1 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 34 35 36 37 import Foundation struct PhotoData : Identifiable, Codable, Equatable { var id:String = UUID()....

2023-03-28 · 2024-07-28

SwiftUI 3-3-3. JSONファイル読み書きコードの改善・例外の対応

3-3-1でJSONファイルの書き出し, 3-3-2でJSONファイルの読み込みを扱いました. これらのコードを使いやすくするため, 例外の処理などを加えて改善します。 まず, JSON保存側の処理の見直しです. PhotoData.save( path: data: )関数 を例外に対応させる 基本的に3-2-3と同様の作業を行う try! を try にする do { ~ } catch { ~ } を使って例外発生を捉える catch内で例外時の処理を記述する コード1 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 34 35 36 37 38 39 40 41 42 43 import Foundation struct PhotoData : Identifiable, Codable, Equatable { var id:String = UUID()....

2023-03-28 · 2023-03-30