SlideShare a Scribd company logo
1 of 59
Download to read offline
SwiftUIのライブコーディングす
るとxcodeが⃝回落ちる
これってトリビアになりませんか?
自己紹介
能登 要 (@notoroid)
• iOSアプリ開発者
• 屋号:いります電算企画
• @notoroid
• @irimasu
• eスポーツ
題目
• SwiftUI 登場
• SwiftUI ライブコーディング
• まとめ
話す範囲
• SwiftUI Tutorials を使ったライブコーディング
• Creating and Combining Views
• https://developer.apple.com/tutorials/swiftui/creating-and-
combining-views
• Drawing Paths and Shapes
• https://developer.apple.com/tutorials/swiftui/drawing-paths-
and-shapes
話さない範囲
• 画面遷移
• データバインディング
• 既存UI との組み合わせ
• アニメーション
• OSごとへのSwiftUI の適用
SwiftUI 登場
WWDC2019は
開発者に盛り沢山の内容
注目はSwiftUI
SwiftUI
• Swift5.1 ベースのUI作成フレームワーク
• DSL(用途範疇固有言語) がSwift5.1で記述できる
• Swift5.1をDSLに寄せた
• UIを構成する基本定義はView
• Viewを宣言的(Declarative)に記述でき簡潔な記述が可能
SwiftUI
• Swift5.1 ベースのUI作成フレームワーク
• DSL(用途範疇固有言語) がSwift5.1で記述できる
• Swift5.1に仕様を追加してDSLに寄せてしまう
• UIを構成する基本定義はView
• Viewを宣言的(Declarative)に記述でき簡潔な記述が可能
SwiftUI
• Swift5.1 ベースのUI作成フレームワーク
• DSL(用途範疇固有言語) がSwift5.1で記述できる
• Swift5.1に仕様を追加してDSLに寄せてしまう
• UIを構成する基本定義はView
• Viewを宣言的(Declarative)に記述でき簡潔な記述が可能
何?
宣言的(Declarative)
• ある出力を得るにあたってそれを作成する方法ではなく、出力の性質を記
述することを「宣言型」と称する
• 宣言的プログラミングの「宣言的」って? (2009)
• https://sh-2.hatenadiary.org/entry/20091006/1254847253
• HTML は宣言的
Apple としては
宣言的な記述を可能とし
宣言的な記述に慣れている
作り手(Web開発者)を呼び寄せたい
宣言的な手法を提供することで
様々なOS(iOS,macOS,watchOS)で
同じ手法を適用できるようにしたい
Apple のSwiftUI導入
• 宣言的な記述を可能とし宣言的な記述に慣れている作り手を呼び寄せたい
• 宣言的な手法を提供し様々なOSで同じ手法を適用できるようにしたい
• Interfacebuilder でのUI作成から20年以上経ち求められるものを提供し
た
Apple のSwiftUI導入
• 宣言的な記述を可能とし宣言的な記述に慣れている作り手を呼び寄せたい
• 宣言的な手法を提供し様々なOSで同じ手法を適用できるようにしたい
• Interfacebuilder でのUI作成から20年以上経ち求められるものを提供し
た
Web開発者にまで開発者の間口を広げる
従来のUI部品(Storyboard,xib)
も組み合わせ可能
OSに最適化された機能をこれまでど
おりアプリに組み込むこともできる
宣言的記述内に複雑な機能を提供できる
いうと思い出す
Webブラウザー
Flash
2000年代前半
SwiftUIと既存UIフレームワークは共存し
つつSwiftUI でリプレースできるUIは
簡潔に記述できるようになる
iOS13からは…
SwiftUI ライブコーディング
SwiftUIは簡潔に
記述できるのが強み
とはいえ意図したレイアウトが
作れなければ話にならない
今回は既存のUIを真似してみる
真似する対象は
タイリングベースのUI
真似するUIは
GloriousBattery
• 端末4台までのバッテリー状態を数値と背景
色で見やすく表示
• クリーンなインターフェイス
• バッテリー状態、充電状態のみを表示
• バッテリー確認したいデバイスを招待
• 端末4台まで登録可能。1つの画面で確認で
きます。
実際のレイアウトを見てみる
4セルSafeAreaまで
塗りつぶし
バッテリー量
単位
時間毎グラフ
充電状態
端末名
円グラデーション
GloriousBatteryのレイアウト
• 4セル
• セル毎にバッテリー情報
• セルの背面にグラデーション
• セルはSafeAreaを出ている
xcode11 の
テンプレートからデザインを
近づけてみる
レギュレーション
• フォントサイズ:75
• 度数フォントサイズ:30 offset: -5,-25
• フォント全体オフセット: 15
• グラデーションカラー:
• Color(red: 102.0 / 255, green: 196.0 / 255, blue: 66.0 / 255)
• グラデーションカラー2:
• Color(red: 87.0 / 255, green: 161.0 / 255, blue: 58.0 / 255)
• 円グラデーション: 開始半径: 50px、終了:半径 150px
• プロジェクト名はMonitor
• カスタムViewは、ContentView、MonitorView、GraphView を使用
View
import SwiftUI
struct ContentView: View {
var body: some View {
Text("Hello World")
}
}
#if DEBUG
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
#endif
SwiftUI のテンプレートコード
Viewはbody で1つのView を派生
した宣言を渡す必要がある。
組み込みView派生
Text
Image
LinearGradient
RadialGradient
RectAngle
Circle
Ellipse
GeometryReader
AngularGradient
Capsule
複数のViewを配置する場合は、
Stack(HStack,VStack,ZStack)
HStack
HStack {
RectAngle()
.foregroundColor(Color.red)
RectAngle()
.foregroundColor(Color.green)
RectAngle()
.foregroundColor(Color.blue)
}
①
②
③
記述順に左から右に配置
① ② ③
VStack
VStack {
RectAngle()
.foregroundColor(Color.red)
RectAngle()
.foregroundColor(Color.green)
RectAngle()
.foregroundColor(Color.blue)
}
①
②
③
記述順に上から下に配置
①
②
③
ZStack
ZStack {
RectAngle()
.foregroundColor(Color.red)
RectAngle()
.foregroundColor(Color.green)
RectAngle()
.foregroundColor(Color.blue)
}
①
②
③
記述順に奥に配置 ①
②
③
Stack の配置はView側にサイズ
指定がない限りは等倍配置
詰め込む場合は
Spacer() を指定
View.edgesIgnoringSafeArea() を使
うとSafeAreaを無視するようになる
Stack(HStack,VStack,HStack)を
使わなくても配置できる
Viewに配置
Viewに配置
background はbodyのclipフィルターに
影響する。
background はView.clip() の
結果が反映される
Rectangle()
.fill(
Color.clear
).background(
背景描画するView
)
.clipped()
ライブコーディング中
リソース
• フォントサイズ:75
• 度数フォントサイズ:30 offset: -5,-25
• フォント全体オフセット: 15
• グラデーションカラー:
• グラデーションカラー2:
RadialGradient(gradient: .init(colors: [Self.gradientStart, Self.gradientEnd]), center: .init(x: 0.5, y:
0.5), startRadius: 50, endRadius: 150)
.aspectRatio(contentMode: .fill)
static let gradientStart = Color(red: 102.0 / 255, green: 196.0 / 255, blue: 66.0 / 255)
static let gradientEnd = Color(red: 87.0 / 255, green: 161.0 / 255, blue: 58.0 / 255)
// .previewDevice(PreviewDevice(rawValue: "iPhone 8") )
.previewDevice(PreviewDevice(rawValue: "iPhone X") )
import SwiftUI
struct GraphView: View {
var body: some View {
HStack(spacing:0) {
ForEach(0 ..< 12) { item in
GraphLineView()
}
Spacer()
}
}
}
#if DEBUG
struct GraphVioew_Previews: PreviewProvider {
static var previews: some View {
GraphView()
// .previewDevice(PreviewDevice(rawValue: "iPhone 8") )
.previewDevice(PreviewDevice(rawValue: "iPhone X") )
}
}
#endif
struct GraphLineView: View {
var body: some View {
ZStack {
// Rectangle()
// .foregroundColor(Color.green)
ForEach(0 ..< 12 ) { item in
GeometryReader { geometry in
Path { path in
let verticalOffset = 0.5 + (item == 0 ? 0 : (geometry.size.height * 0.2))
path.move(
to: CGPoint(
x: 0.5 + CGFloat(item) * 2.5,
y: verticalOffset
)
)
path.addLine(
to: CGPoint(
x: 0.5 + CGFloat(item) * 2.5,
y: 0.5 + geometry.size.height
)
)
}
.stroke(Self.strokeColor, lineWidth: 1)
}
}
}.frame(width:29.5, height:20)
}
static let strokeColor = Color(white: 1, opacity: 0.8)
}
まとめ
• SwiftUI はSwiftで記述できるDSLであるSwiftソースコードです
• 20年ぶりにAppleが重い腰を上げて新しい開発者の呼び込み中
• SwiftUIのレイアウトはWebのデザインに近いけどクセもあり
• SwiftUI は流し込むデータソースありきなのでモックアップ用のデータは
準備したほうがいいかも

More Related Content

Similar to SwiftUIのライブコーディングするとxcodeが◯回落ちる

マークアップ講座 02 CSS
マークアップ講座 02 CSSマークアップ講座 02 CSS
マークアップ講座 02 CSSeiji sekiya
 
iOS13 SDK による 全機能置き換え Part1
iOS13 SDK による 全機能置き換え Part1iOS13 SDK による 全機能置き換え Part1
iOS13 SDK による 全機能置き換え Part1Kaname Noto
 
Swift - Result&lt;t>型で結果を返すのは邪道か,王道か
Swift - Result&lt;t>型で結果を返すのは邪道か,王道かSwift - Result&lt;t>型で結果を返すのは邪道か,王道か
Swift - Result&lt;t>型で結果を返すのは邪道か,王道かYuichi Yoshida
 
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみようJavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみようHiroaki Wakamatsu
 
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】Tomoharu ASAMI
 
これからはじめる SwiftPlayground入門
これからはじめる SwiftPlayground入門これからはじめる SwiftPlayground入門
これからはじめる SwiftPlayground入門Hiramatsu Ryosuke
 
Developr Camp 2012 Japan Fall Day2 Special Session - Visual Studio 2012 で始める ...
Developr Camp 2012 Japan Fall Day2 Special Session - Visual Studio 2012 で始める ...Developr Camp 2012 Japan Fall Day2 Special Session - Visual Studio 2012 で始める ...
Developr Camp 2012 Japan Fall Day2 Special Session - Visual Studio 2012 で始める ...Developer Camp 2012 Japan Fall
 
Dev camp2012jpn day2special
Dev camp2012jpn day2specialDev camp2012jpn day2special
Dev camp2012jpn day2specialKatsuhito Katoh
 
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...
Windows アプリケーション開発はじめに ~ Windows アプリケーション開発初学者の方向けVisual Studio を使ったアプリケーショ...Windows アプリケーション開発はじめに ~ Windows アプリケーション開発初学者の方向けVisual Studio を使ったアプリケーショ...
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...Fujio Kojima
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~Akira Inoue
 
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 EastiOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 Eastirgaly
 
IoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノート
IoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノートIoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノート
IoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノートKazumi IWANAGA
 
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発Daizen Ikehara
 
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Akira Inoue
 
Wolcome to swift
Wolcome to swiftWolcome to swift
Wolcome to swiftKyohei Ito
 
Presentation on your terminal
Presentation on your terminalPresentation on your terminal
Presentation on your terminalTakuya ASADA
 
XcodeのTargetについてのTIPS
XcodeのTargetについてのTIPSXcodeのTargetについてのTIPS
XcodeのTargetについてのTIPSYoichiro Sakurai
 
FlutterをRenderObjectまで理解する
FlutterをRenderObjectまで理解するFlutterをRenderObjectまで理解する
FlutterをRenderObjectまで理解するKeisukeKiriyama
 

Similar to SwiftUIのライブコーディングするとxcodeが◯回落ちる (20)

マークアップ講座 02 CSS
マークアップ講座 02 CSSマークアップ講座 02 CSS
マークアップ講座 02 CSS
 
iOS13 SDK による 全機能置き換え Part1
iOS13 SDK による 全機能置き換え Part1iOS13 SDK による 全機能置き換え Part1
iOS13 SDK による 全機能置き換え Part1
 
Swift - Result&lt;t>型で結果を返すのは邪道か,王道か
Swift - Result&lt;t>型で結果を返すのは邪道か,王道かSwift - Result&lt;t>型で結果を返すのは邪道か,王道か
Swift - Result&lt;t>型で結果を返すのは邪道か,王道か
 
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみようJavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
 
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
 
これからはじめる SwiftPlayground入門
これからはじめる SwiftPlayground入門これからはじめる SwiftPlayground入門
これからはじめる SwiftPlayground入門
 
Developr Camp 2012 Japan Fall Day2 Special Session - Visual Studio 2012 で始める ...
Developr Camp 2012 Japan Fall Day2 Special Session - Visual Studio 2012 で始める ...Developr Camp 2012 Japan Fall Day2 Special Session - Visual Studio 2012 で始める ...
Developr Camp 2012 Japan Fall Day2 Special Session - Visual Studio 2012 で始める ...
 
Dev camp2012jpn day2special
Dev camp2012jpn day2specialDev camp2012jpn day2special
Dev camp2012jpn day2special
 
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...
Windows アプリケーション開発はじめに ~ Windows アプリケーション開発初学者の方向けVisual Studio を使ったアプリケーショ...Windows アプリケーション開発はじめに ~ Windows アプリケーション開発初学者の方向けVisual Studio を使ったアプリケーショ...
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
 
Inside of swift
Inside of swiftInside of swift
Inside of swift
 
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 EastiOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
 
IoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノート
IoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノートIoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノート
IoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノート
 
Ignite UI 2012 最新情報 jQuery Mobile 編
Ignite UI 2012 最新情報 jQuery Mobile 編Ignite UI 2012 最新情報 jQuery Mobile 編
Ignite UI 2012 最新情報 jQuery Mobile 編
 
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
 
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
 
Wolcome to swift
Wolcome to swiftWolcome to swift
Wolcome to swift
 
Presentation on your terminal
Presentation on your terminalPresentation on your terminal
Presentation on your terminal
 
XcodeのTargetについてのTIPS
XcodeのTargetについてのTIPSXcodeのTargetについてのTIPS
XcodeのTargetについてのTIPS
 
FlutterをRenderObjectまで理解する
FlutterをRenderObjectまで理解するFlutterをRenderObjectまで理解する
FlutterをRenderObjectまで理解する
 

SwiftUIのライブコーディングするとxcodeが◯回落ちる