SwiftUIでPageControlを使用する

SwiftUIでPageControlを使用する方法です。


SwiftUIでシートを出し分ける

SwiftUIでシートを出し分ける方法です。


SwiftMarkdownを使いマークダウンを表示する

SwiftMarkdownを使いマークダウンを表示する方法です。


SwiftUIで画像をピンチで拡大する(UIImageView + UIScrollView)

SwiftUIで画像をピンチで拡大する(UIImageView + UIScrollView)方法です。


SwiftUIで画像をピンチで拡大する(PDFView)

SwiftUIで画像をピンチで拡大する(PDFView)方法です。


SwiftUIで画像をピンチで拡大する(MagnificationGesture)

SwiftUIでPreviewを横向きにする方法です。


SwiftUIでPHPickerViewControllerを使って画像を選択する

SwiftUIでPHPickerViewControllerを使って画像を選択する方法です。


SwiftUIでスライダーとスクロールを連動させる

SwiftUIでスライダーとスクロールを連動させる方法です。


SwiftUIでカメラを使う

SwiftUIでカメラを使う方法です。 カメラを利用できるViewを作成し、sheetで表示しています。 権限の追加も必要です。


Identifiableに適合していないStructでListを使う

Identifiableに適合していないStructでListを使う方法です。


SwiftUIのTabViewのタブをコードから動的に切り替える

SwiftUIのTabViewのタブをコードから動的に切り替える方法です。


SwiftUIでListにButtonを設定して異なる画面に遷移する

SwiftUIでListにButtonを設定して異なる画面に遷移する方法です。


SwiftUIで少しカスタマイズしたインディケーターを表示する

SwiftUIで少しカスタマイズしたインディケーターを表示する方法です。


SwiftUIでインディケーターを表示する

SwiftUIでインディケーターを表示する方法です。


SwiftUIでUIActivityViewControllerを表示する

SwiftUIでUIActivityViewControllerを表示する方法です。


iOSのファイルアプリ(UIDocumentPickerViewController)を開いてドキュメントフォルダに保存したファイルを開く

iOSのファイルアプリ(UIDocumentPickerViewController)を開いてドキュメントフォルダに保存したファイルを開く方法です。


SwiftUIでObservableObjectの@publishedなプロパティとBindingする

SwiftUIでObservableObjectの@publishedなプロパティとBindingする方法です。


Swiftのasync,awaitを使ってAPIと画像を取得し、全てが揃ってから表示する

Swiftのasync,awaitを使ってAPIと画像を取得し、全てが揃ってから表示する方法です。


SwiftUIでBadgeを表示する

SwiftUIでBadgeを表示する方法です。


NavigationStackのpathを使って画面遷移する

NavigationStackのpathを使って画面遷移する方法です。


SwiftUIでテーブルのようなデータを表示する

SwiftUIでテーブルのようなデータを表示する法です。


SwiftUIで音楽を再生する

SwiftUIで音楽を再生する方法です。


SwiftUIでdelegateを使用する

SwiftUIでdelegateを使用する方法です。


SwiftUIでグラフを表示する

SwiftUIでグラフを表示する方法です。


SwiftUIでAppDelegateを使用する

SwiftUIでAppDelegateを使用する方法です。アプリ終了時にUserDefaultsに値を保存しています。


Swiftで10進数を2進数に変換する

Swiftで10進数を2進数に変換する方法です。


SwiftUIでローカル通知を送信する

SwiftUIでローカル通知を送信する方法です。


SwiftUIでアラートのメッセージを出し分ける

SwiftUIでアラートのメッセージを出し分ける方法です。


SwiftUIでカレンダーを作成する

SwiftUIでカレンダーを作成する方法です。


SwiftUIでImageの色を反転させる

SwiftUIでImageの色を反転させる方法です。


SwiftUIでMapを表示し、自分の位置を表示しつつコンパスを表示する

SwiftUIでMapを表示し、自分の位置を表示しつつコンパスを表示する方法です。


SwiftUIでMapを表示し、自分の位置を赤丸でマークする

SwiftUIでMapを表示し、自分の位置を赤丸でマークする方法です。


SwiftUIでMapを表示し、自分の位置を中心にする

SwiftUIでMapを表示し、自分の位置を中心にする方法です。


SwiftUIでMapを表示する

SwiftUIを使ってMapを表示してください。秋葉原UDX(35.7005° N, 139.7726° E)を中心として、300mの範囲を表示しています。


SwiftUIでSearchBar(TextField)にクリアボタンをつける

SwiftUIでSearchBar(TextField)にクリアボタンをつける方法です。


SwiftUIでSearchBar(TextField)を使って検索する

SwiftUIでPreviewを横向きにする方法です。


SwiftUIのListの中にボタンを複数設置する

SwiftUIのListの中にボタンを複数設置する方法です。


SwiftUIのListでSpacerの部分にもタップ判定をつける

SwiftUIのListでSpacerの部分にもタップ判定をつける方法です。


SwiftUIでListをEditModeにして並び替える

SwiftUIでListをEditModeにして並び替える方法です。


SwiftUIでシートを表示し、プッシュ遷移後にシートを閉じる

SwiftUIでシートを表示し、プッシュ遷移後にシートを閉じる方法です。


SwiftUIのTextFieldで表示するキーボードを指定する

SwiftUIのTextFieldで表示するキーボードを指定する方法です。


SwiftUIでButtonを有効にしたり無効にしたりする

SwiftUIでButtonを有効にしたり無効にしたりする方法です。


SwiftUIでViewを横スクロールで表示する

SwiftUIでViewを横スクロールで表示する方法です。


SwiftUIでボタンを押すとポップアップを表示する

SwiftUIでボタンを押すとポップアップを表示する法です。


SwiftUIでBMIを計算し、結果を別のViewで表示する

SwiftUIでBMIを計算し、結果を別のViewで表示する方法です。


SwiftUIでモーダルを表示する時に値を渡す

SwiftUIでモーダルを表示する時に値を渡す方法です。


SwiftUIでAVAudioPlayerで音楽を再生し、再生終了を検知する

SwiftUIでAVAudioPlayerで音楽を再生し、再生終了を検知する方法です。


SwiftUIを使ったTODOアプリのサンプル

SwiftUIを使ったTODOアプリのサンプルです。


SwiftUIでMapを使う。Mapに画像や図形を表示する

SwiftUIでMapを使う。Mapに画像や図形を表示する法です。


SwiftUIでViewの上にViewを重ねる

SwiftUIでViewの上にViewを重ねる方法です。


SwiftUIでAppStorageを使ってUserDefaultの値を監視する

SwiftUIでAppStorageを使ってUserDefaultの値を監視する方法です。


SwiftUIのTextFieldで編集中と編集完了を検知する

SwiftUIのTextFieldで編集中と編集完了を検知する方法です。


GithubのAPIを叩き、リポジトリの情報をリストに表示する。一番下までスクロールされたら追加で取得し、Indicatorも表示する

GithubのAPIを叩き、リポジトリの情報をリストに表示する。一番下までスクロールされたら追加で取得し、Indicatorも表示する方法です。


GithubのAPIを叩き、リポジトリの情報をリストに表示する。一番下までスクロールされたら追加で取得する

GithubのAPIを叩き、リポジトリの情報をリストに表示する。一番下までスクロールされたら追加で取得する方法です。


GithubのAPIを叩き、リポジトリの情報をリストに表示する(async, await)

GithubのAPIを叩き、リポジトリの情報をリストに表示する(async, await)方法です。


マークダウンのリンクの色を赤色に変える

マークダウンのリンクの色を赤色に変える方法です。


変数に格納したマークダウンを表示する

変数に格納したマークダウンを表示する方法です。


マークダウンを表示する

マークダウンを表示する方法です。


SwiftUIでハーフモーダルを表示する

SwiftUIでハーフモーダルを表示する方法です。


SwiftUIでアプリ起動時に画面を遷移させる

SwiftUIでアプリ起動時に画面を遷移させる方法です。


SwiftUIで閉じることができないモーダルを表示する

SwiftUIで閉じることができないモーダルを表示する方法です。


スワイプで遷移するチュートリアル画面を作る

スワイプで遷移するチュートリアル画面を作る方法です。


UICollectionViewのようにViewを並べる

UICollectionViewのようにViewを並べる方法です。


端末のシェイクを検知する

端末のシェイクを検知する


SwiftUIでPreviewを横向きにする

SwiftUIでPreviewを横向きにする方法です。


SwiftUIでNavigationBarを隠す

SwiftUIでNavigationBarを隠す方法です。


SwiftUIで全画面でSheetを表示する

SwiftUIで全画面でSheetを表示する方法です。


SwiftUIでSheetを表示する

SwiftUIでSheetを表示する方法です。


SwiftUIで複数行のPickerを作成する

SwiftUIで複数行のPickerを作成する方法です。


SwiftUIでListViewからそれぞれ別のViewに遷移する

SwiftUIでListViewからそれぞれ別のViewに遷移する方法です。


SwiftUIで画面遷移先のViewから遷移元のメソッドを呼び出す

SwiftUIで画面遷移先のViewから遷移元のメソッドを呼び出す方法です。


SwiftUIでリストのセルをタップしてアラートを表示させる

SwiftUIでリストのセルをタップするとアラートが表示させる方法です。 リストのセルをタップするとアラートが表示させています。


SwiftUIでリストを編集する

SwiftUIでリストを編集する方法です。


SwiftUIでViewModifierを使ってViewに影をつける

SwiftUIでViewModifierを使ってViewに影をつける方法です。 ViewModifierを使ってViewに影をつけています。


SwiftUIでFunctionBuilderを使ってViewに影をつける

SwiftUIでFunctionBuilderを使ってViewに影をつける方法です。 FunctionBuilderを使ってViewに影をつけています。


SwiftUIでText中の文字の太さや色を変える

SwiftUIで画像を丸く切り取り枠を付ける方法です。 150×200サイズに画像をリサイズして表示させています。 アスペクト比が異なる場合ははみ出た箇所を切り取って表示しています。


SwiftUIで続きを読む。。。ボタンがあるViewを実装する

SwiftUIで続きを読む。。。ボタンがあるViewを実装する方法です。


NavigationLinkを使用せずにプッシュ遷移する(.navigationDestination)

NavigationLinkを使用せずにプッシュ遷移する(.navigationDestination)方法です。


SwiftUIでアラートとシートを出し分ける

SwiftUIでアラートとシートを出し分ける方法です。 数字が入力されたらシートを表示し、数字以外が入力されたらアラートを表示しています。


SwiftUIでButton内の画像やテキストの色を変えない

SwiftUIでButton内の画像やテキストの色を変えない方法です。 .buttonStyle(PlainButtonStyle()) を設定することでボタンを押した時の色を変えずに済みます。


SwiftUIでAlertを出し分ける

SwiftUIでAlertを出し分ける方法です。 ボタン1が押されたらアラート1を、ボタン2が押されたらアラート2を表示してください


SwiftUIでAlertを表示する

SwiftUIでAlertを表示する方法です。 showingAlert 変数を true にすることでアラートを表示することができます。


SwiftUIでListのスタイルを変更する(plain)

SwiftUIでListのスタイルを変更する方法です。 listStyle に plain を設定しています。


SwiftUIでNavigationViewの戻るボタンを非表示にする

SwiftUIでNavigationViewの戻るボタンを非表示にする方法です。 navigationBarBackButtonHidden を false にすることで非表示にすることができます。


SwiftUIで画面遷移時に値を渡す

SwiftUIで画面遷移時に値を渡す方法です。 遷移先の画面に文字列を渡しています。


SwiftUIでListを使ってセクションごとに表示する

SwiftUIでListを使ってセクションごとに表示する方法です。 Listの listStyle を指定して表示方法を変えています。


SwiftUIでButtonが押されたら文字を変える

SwiftUIでButtonが押されたら文字を変える方法です。 @State が付与された変数を変えることで View 変えることができます。


SwiftUIでTabViewを使って画面を切り替える

SwiftUIでTabViewを使って画面を切り替える方法です。


SwiftUIでPickerを表示する

SwiftUIでPickerを表示する方法です。 Pickerを使いポケモンを表示しています。


SwiftUIでNavigationViewを使いラージタイトルを表示する

SwiftUIでNavigationViewを使いラージタイトルを表示する方法です。 navigationTitle でタイトルを設定し、navigationBarTitleDisplayMode でサイズを指定しています。


SwiftUIで画像を等間隔で横に並べる

SwiftUIで画像を等間隔で横に並べる方法です。 Spacerを使うことで等間隔にViewを並べることができます。


SwiftUIで画像を丸く切り取り枠を付ける

SwiftUIで画像を丸く切り取り枠を付ける方法です。 150×200サイズに画像をリサイズして表示させています。 アスペクト比が異なる場合ははみ出た箇所を切り取って表示しています。


SwiftUIで画像をリサイズして表示する(clip)

SwiftUIで画像をリサイズして表示させる方法です。 150×200サイズに画像をリサイズして表示させています。 アスペクト比が異なる場合ははみ出た箇所を切り取って表示しています。


SwiftUIで画像を画像を丸く切り取る

SwiftUIで画像を画像を丸く切り取る方法です。 150✖︎150サイズに画像をリサイズし、丸く切り取って表示させています。 アスペクト比が異なる場合ははみ出た箇所を切り取って表示しています。


SwiftUIで画像をリサイズして表示する(fit)

SwiftUIで画像をリサイズして表示させる方法です。 150×200サイズに画像をリサイズして表示させています。 アスペクト比が異なる場合は余白を赤色で表示しています。


SwiftUIでマークダウンを表示する

SwiftUIでマークダウンを表示する方法です。 マークダウンのパースには swift-markdown を使用しています。 また Header(#) と テキストのみに対応しています。


SwiftUIでPDFを表示する

SwiftUIでPDFを表示する方法です。 PDFView を利用して snorlax.pdf を表示させています。


SwiftでURLが入ったJSONをデコードする

SwiftでURLが入ったJSONをデコードする方法です。 普通にデコードするだけで URL型にすることができました。


SwiftUIでImageの色を反転させる

SwiftUIでImageの色を反転させる方法です。 .colorInvert() を追加することで色を反転させることができます。 SDWebImage/SDWebImageSwiftUI


SwiftでJSONをDictonaryでDecodeする

SwiftでJSONをDictonaryでDecodeする方法です。 Mapのような辞書配列をDictionaryのプロパティを持つstructでDecodeしています。


UserDefaultsで複数の値をセットで保存する

UserDefaultsで複数の値をセットで保存する方法です。 辞書型配列を使う方法と保存用のstructを作成する方法でサンプルコードを作成しました。 Set ボタンを押すと UserDefaults にカビゴンの情報が保存され、Get ボタンを押すとカビゴンの情報をコンソールに出力します。 辞書型配列を使う方法


Swiftでモーダル表示時にviewWillDisappearが呼ばれない

Swiftでモーダル表示時にviewWillDisappearが呼ばれないということが起きました。 以下のようにボタンを押したタイミングでフルスクリーンのモーダルが表示されるとします。 modalPresentationStyle を .fullScreen にすると viewWillDisappear と viewDidAppear がモーダル表示のタイミングで呼ばれますが、.overFullScreen にすると viewDidAppear しか呼ばれませんでした。 参考: iOSにおけるモーダル表示まとめ


SwiftでUICalendarViewを使ってカレンダーを表示する

SwiftでUICalendarViewを使ってカレンダーを表示する方法です。 iOS16からUICalendarViewというすごく便利なものが使えるようになりました。 参考: How to use UICalendarView in iOS


SwiftUIでUICalendarViewを使ってカレンダーを表示する

SwiftUIでUICalendarViewを使ってカレンダーを表示する。 iOS16からUICalendarViewというすごく便利なものが使えるようになりました。 今回はSwiftUIでUICalendarViewを使用し、数字をタップすると日付がコンソールに出力されます。 参考: How to use UICalendarView in iOS


SwiftUIでTODOアプリを作成する

SwiftUIでTODOアプリのサンプルを作成してみました。 Add Scheduleボタンを押すと予定入力画面が表示されます。 日付を押すと予定一覧画面が表示され、予定の一覧を確認することができます。


SwiftUIでカレンダーを作成する

SwiftUIでカレンダーを作成する方法です。 VStack と HStack を組み合わせて作成しました。 2023年2月24日追記 iOS16からUICalendarViewという便利なものが用意されたのでそれを使った方が良いかもしれません。 こちら の記事です。


SwiftUIでアラートのメッセージを出し分ける

SwiftUIでアラートのメッセージを出し分ける方法です。 アラート表示前にアラートメッセージを変更しています。


SwiftUIでローカル通知を送信する

SwiftUIでローカル通知を送信する方法です。 ローカル通知であればサーバーを用意しなくてもプッシュ通知を送信することができます。 参考: 【SwiftUI】通知機能の実装方法!ローカル通知とリモート通知の違い


UICollectionViewでContextMenuを使う

UICollectionViewでContextMenuを使う方法です。 セルを長押しするとContextMenuを表示します。 参考: iOS13から追加されるContext Menusについて


Swiftのasync,awaitを使ってAPIと画像を取得し、全てが揃ってから表示する

Swiftのasync,awaitを使ってAPIと画像を取得し、全てが揃ってから表示する方法です。


Swiftのasync,awaitを使ってAPIをフェッチする

Swiftのasync,awaitを使ってAPIをフェッチする方法です。 従来のClosureを使った方法とasyncを使った方法です。


SwiftUIでObservableObjectの@publishedなプロパティとBindingをする

SwiftUIでObservableObjectの@publishedなプロパティとBindingをする方法です。 ここでは AddItemViewState まで ContentView の items をバケツリレーしています。


iOSのファイルアプリ(UIDocumentPickerViewController)を開いてドキュメントフォルダに保存したファイルを開く

iOSのファイルアプリ(UIDocumentPickerViewController)を開いてドキュメントフォルダに保存したファイルを開く方法です。 info.plist にファイルアプリでドキュメントディレクトリを開けるように Supports opening documents in place と Application supports iTunes file sharing を追加し、どちらも YES に設定します。


Swiftで複数のViewをドラッグで移動する

Swiftで複数のViewをドラッグで移動する方法です。 ViewController でタッチのイベントを検出し、PokemonViewであればViewを移動させています。 同時にContextMenuのinteractionも設定しています。


Swiftでドラッグで移動し、長押しでContextMenuを表示する

Swiftでドラッグで移動し、長押しでContextMenuを表示する方法です。 ViewController でタッチのイベントを検出し、その箇所にViewを移動させています。 同時にContextMenuのinteractionも設定しています。


Swiftでタップ、ドラッグした箇所にViewを移動させる

Swiftでタップ、ドラッグした箇所にViewを移動させる方法です。 ViewController でタッチのイベントを検出し、その箇所にViewを移動させています。


Playgroundで2次のベジェ曲線を描画する

Playgroundで2次のベジェ曲線を描画する方法です。 あなたの知らないベジェ曲線の世界 に詳細な解説があります。


Swiftで配列からランダムに要素を取り出す

Swiftで配列からランダムに要素を取り出す方法です。 配列をシャッフルした後に先頭の要素を取得しています。 // 0, 1, 2, ... 9 の配列からランダムに5要素抽出する var numbers: [Int] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] print(numbers) // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] // 配列をシャッフルする numbers.shuffle() print(numbers) // [1, 7, 9, 4, 6, 2, 0, 3, 8, 5] // .prefix を使い先頭の5要素を取得する。prefix の戻り値の型は Array<T> ではなく、ArraySlice<T> なので変換する必要がある。 let arraySlicedNumbers: ArraySlice<Int> = numbers.prefix(5) let slicedNumbers: [Int] = Array(arraySlicedNumbers) print(slicedNumbers) // [1, 7, 9, 4, 6]


Swiftで16進数を使う

Swiftで16進数を使う方法です。 0x を使うことで16進数を表現できます。(1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, 10, 11, 12, …, 19, 1a, 1b) 0x12 は10進数で18です。 let number: Int = 0x12 print(number) // 18


Swiftで桁数を指定する

e の後ろに桁数を指定することができます。 let number: Double = 123e2 print(number) // 12300.0 負の値にすると小数点にできます。 let number: Double = 123e-4 print(number) // 0.0123


Swiftで関数の引数にジェネリクスを使う

Swiftで関数の引数にジェネリクスを使う方法です。 以下のように記述することで、引数に Int でも String でも受け取ることが可能になります。 func createTuple<T>(a: T, b: T) -> (T, T) { return (a, b) } let stringTuple: (String, String) = createTuple(a: "Snorlax", b: "Ditto") print(stringTuple) // ("Snorlax", "Ditto") let intTuple: (Int, Int) = createTuple(a: 143, b: 132) print(intTuple) // (143, 132)


PlaygroundでViewのプレビューを表示する

PlaygroundでViewのプレビューを表示する方法です。 PlaygroundPage.current.liveView に表示したいViewを設定することでプレビューを表示できます。


SwiftでSetから要素を削除する

SwiftでSetから要素を削除する方法です。 remove を使うことで要素を削除することができます。 var mySet: Set = [1, 2, 3, 4] mySet.remove(3) print(mySet) // [1, 2, 4] 存在しない要素に対して remove しても例外は発生しません。 var mySet: Set = [1, 2, 3, 4] mySet.remove(6) print(mySet) // [4, 2, 3, 1]


SwiftUIで画像をピンチで拡大する(UIImageView + UIScrollView)

SwiftUIで画像をピンチで拡大する方法です。 UIImageViewとUIScrollViewを使って画像をピンチで拡大します。 他にはこのような方法があります。 SwiftUIで画像をピンチで拡大する(MagnificationGesture) SwiftUIで画像をピンチで拡大する(PDFView)


SwiftUIで画像をピンチで拡大する(PDFView)

SwiftUIで画像をピンチで拡大する方法です。 画像をピンチで拡大します。 他にはこのような方法があります。 SwiftUIで画像をピンチで拡大する(MagnificationGesture) SwiftUIで画像をピンチで拡大する(UIImageView + UIScrollView) 参考: Isn’t there an easy way to pinch to zoom in an image in Swiftui?


SwiftUIで画像をピンチで拡大する(MagnificationGesture)

SwiftUIで画像をピンチで拡大する方法です。 MagnificationGestureを使った方法で画像をピンチで拡大します。 ただこの方法ではドラッグすることができないので、他の方法にする必要があります。 他にはこのような方法があります。 SwiftUIで画像をピンチで拡大する(PDFView) SwiftUIで画像をピンチで拡大する(UIImageView + UIScrollView)


SwiftUIでMapViewを使い複数の位置情報を選択する

SwiftUIでMapViewを使い複数の位置情報を選択する方法です。 addボタンを押した位置情報を記録します。listボタンを押すとその位置情報の一覧を表示します。


SwiftUIでのプッシュ通知の最小構成

SwiftUIでのプッシュ通知の最小構成です。 プッシュ通知のテストをしたい時に使用します。


MKMapViewで経路を表示する

MKMapViewで経路を表示する方法です。 新宿駅から秋葉原駅への経路を表示しています。 参考: 【Swift】MapKitで経由地点を含めたルートディレクションの表示方法


MKMapViewの表示範囲を設定する

MKMapViewの表示範囲を設定する方法です。 秋葉原駅(35.6984, 139.7731)を中心として緯度経度が±0.1となるように表示されます。 参考: 【Swift】MapKitで経由地点を含めたルートディレクションの表示方法


CollectionViewに区切り線を追加する

CollectionViewに区切り線を追加する方法です。 参考: UICollectionView の Layout で悩んだら Decoration Viewを用いてCollection Viewに区切り線と背景を追加する


CollectionViewの背景にスクロールする画像を設定する

CollectionViewの背景にスクロールする画像を設定する方法です。 よくわかっていないのですが、backgroundColor に画像を設定すると背景にスクロールする画像を設定できます。


UICollectionViewのサンプル

UICollectionViewのサンプルです。 makeColor() 関数でランダムに生成した色をセルに入れています。 スクロールするたびに色が変わります。


Swiftで最低幅を持ち横幅が可変なボタンを作成する

Swiftで最低幅を持ち横幅が可変なボタンを作成する方法です。 ボタンの横幅が最低53pxで、余白が12px以上あるボタンを作成しています。


CollectionViewで並び替え時に選択されたセルにアニメーションを付与する

CollectionViewで並び替え時に選択されたセルにアニメーションを付与する方法です。 長押しすると移動できるようになります。 参考: iOS – Longpress drag and drop using UICollectionView with Animation


UICollectionViewのセルを並び替える

UICollectionViewのセルを並び替える方法です。 長押しすると移動できるようになります。 参考: CollectionViewの並び替えを実装する | RE:ENGINES


Xcodeで左側のファイル一覧のナビゲーションが隠れてしまって出てこない

Xcodeで左側のファイル一覧のナビゲーションが隠れてしまって出てこないときの方法です。 command + 0 で出したり引っ込めたりすることができます。


SwiftUIでさまざまなデバイスのプレビューを確認する

SwiftUIでさまざまなデバイスのプレビューを確認する方法です。 まず以下のコマンドでデバイスの一覧を確認します。 デバイス名は正確に入力する必要があります。 $ xcrun simctl list devicetypes == Device Types == iPhone 4s (com.apple.CoreSimulator.SimDeviceType.iPhone-4s) iPhone 5 (com.apple.CoreSimulator.SimDeviceType.iPhone-5) iPhone 5s (com.apple.CoreSimulator.SimDeviceType.iPhone-5s) iPhone 6 Plus (com.apple.CoreSimulator.SimDeviceType.iPhone-6-Plus) iPhone 6 (com.apple.CoreSimulator.SimDeviceType.iPhone-6) iPhone 6s (com.apple.CoreSimulator.SimDeviceType.iPhone-6s) iPhone 6s Plus (com.apple.CoreSimulator.SimDeviceType.iPhone-6s-Plus) iPhone SE (1st generation) (com.apple.CoreSimulator.SimDeviceType.iPhone-SE) iPhone 7 (com.apple.CoreSimulator.SimDeviceType.iPhone-7) iPhone 7 Plus (com.apple.CoreSimulator.SimDeviceType.iPhone-7-Plus) iPhone 8 (com.apple.CoreSimulator.SimDeviceType.iPhone-8) iPhone 8 Plus (com.apple.CoreSimulator.SimDeviceType.iPhone-8-Plus) iPhone X (com.apple.CoreSimulator.SimDeviceType.iPhone-X) iPhone Xs (com.apple.CoreSimulator.SimDeviceType.iPhone-XS) iPhone Xs Max (com.apple.CoreSimulator.SimDeviceType.iPhone-XS-Max) iPhone Xʀ (com.apple.CoreSimulator.SimDeviceType.iPhone-XR) iPhone 11 (com.apple.CoreSimulator.SimDeviceType.iPhone-11) iPhone 11 Pro (com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro) iPhone 11 Pro Max (com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro-Max) iPhone SE (2nd generation) (com.apple.CoreSimulator.SimDeviceType.iPhone-SE--2nd-generation-) iPhone 12 mini (com.apple.CoreSimulator.SimDeviceType.iPhone-12-mini) iPhone 12 (com.apple.CoreSimulator.SimDeviceType.iPhone-12) iPhone 12 Pro (com.apple.CoreSimulator.SimDeviceType.iPhone-12-Pro) iPhone 12 Pro Max (com.apple.CoreSimulator.SimDeviceType.iPhone-12-Pro-Max) iPhone 13 Pro (com.apple.CoreSimulator.SimDeviceType.iPhone-13-Pro) iPhone 13 Pro Max (com.apple.CoreSimulator.SimDeviceType.iPhone-13-Pro-Max) iPhone 13 mini (com.apple.CoreSimulator.SimDeviceType.iPhone-13-mini) iPhone 13 (com.apple.CoreSimulator.SimDeviceType.iPhone-13) ... 参考: previewDevice(_:)


iOS15でPickerを横に並べるとタップ領域が重なってしまう

iOS15でPickerを横に並べるとタップ領域が重なってしまう不具合に悩まされたのでその忘備録です。 以下の様なコードをiOS15の実機で実行し、左側の行を動かそうとすると右側の行が動いてしまいます。iOS14やシミュレーターでは問題なく動作します。 Pickerを複数並べると.clip()を使ってもタップ領域が広がってしまうって問題です!


SwiftUIでMapViewの中央に十字を用意し、その中央の座標を取得する

SwiftUIでMapViewの中央に十字を用意し、その中央の座標を取得する方法です。 MapViewが動いたタイミングでラベルの文字列が更新されます。


SwiftでMapViewの中央に十字を用意し、その中央の座標を取得する

SwiftでMapViewの中央に十字を用意し、その中央の座標を取得する方法です。 スクロールしたりピンチしたタイミングで regionDidChangeAnimated が呼ばれるので、その時の中心の座標を取得しています。


SwiftUIでPHPickerViewControllerを使って画像を選択する

SwiftUIでPHPickerViewControllerを使って画像を選択する方法です。 ImagePickerというクラスを使って実現しました。


SwiftでJSONエンコードするときに数字の桁数を指定する

SwiftでJSONデコードするときに数字の桁数を指定する方法です。 文字列になってしまいましたが、以下のように encode メソッドを書くことで桁数を指定します。 import Foundation struct MyStruct: Encodable { let number: Double enum CodingKeys: String, CodingKey { case number } func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) try container.encode(String(format: "%05f", number), forKey: .number) } } let myStruct = MyStruct(number: 1.0 / 3.0) let data = try! JSONEncoder().encode(myStruct) print(String(data: data, encoding: String.Encoding.utf8)!) {"number":"0.333333"}


Swiftの細かい文法のメモ

関数の引数は呼び出し側で省略したり、別名をつけたりすることができる。 func buyA(product: Int, price: Int, quantity: Int) { print(product, price, quantity) } buyA(product: 1200, price: 1500, quantity: 1) func buyB(_ product: Int, _ price: Int, _ quantity: Int) { print(product, price, quantity) } buyB(123, 123, 123) func buyC(a product: Int, b price: Int, c quantity: Int) { print(product, price, quantity) } buyC(a: 123, b: 123, c: 123) 関数が1行の場合は return を省略できる。 func messageA() -> String { return "Hello" } func messageB() -> String { "Hello" } return と同じ行に書いたコードは実行される。もちろんそれよりも下の行は実行されない。 func sayHello() { print("Hello") return print("XXX") print("YYY") } sayHello() Hello XXX Swift で GOTO 的なことをする。


Swiftで引数を参照渡しをする

Swiftで引数を参照渡しをする方法です。 まず普通に書いた場合です。 プログラム実行後 x = 2, y = 4 となります。 import UIKit let x: Int = 2 func double(num: Int) -> Int { return x * 2 } let y: Int = double(num: 2) print("x = \(x), y = \(y)") // x = 2, y = 4 Swiftで引数を参照渡しをする方法です。 inout で引数を参照私にすることができます。 プログラム実行後 x = 4, y = 4 となります。 import UIKit var x: Int = 2 func inoutDouble ( num: inout Int) -> Int{ num = num * 2 return num } let y = inoutDouble(num: &x) print("x = \(x), y = \(y)") // x = 4, y = 4


PHPickerViewControllerを使って画像を選択する

PHPickerViewController を使って画像を選択する方法です。 UIImagePickerController が将来的に非推奨になり PHPickerViewController に置き換わっていくみたいです。 参考: Meet the new Photos picker


UIKitのScrollViewでページングを実装する

UIKitのScrollViewでページングを実装する方法です。 スクロールすると切り替わるタイミングでピタッと止まります。


SwiftUIでスライダーとスクロールを連動させる

SwiftUIでスライダーとスクロールを連動させる方法です。 スライダーの値を変えることでScrollViewのスクロールを動かしています。


SwiftUIでカメラを使う

SwiftUIでカメラを使う方法です。 録画を可能にする CameraView を作成しそれを SwiftUI 側で呼び出すようにします。 SwiftUIでカメラを使ったり、写真を保存するには色々とプライバシーの許可を Info.plist に設定する必要があります。 [Swift] AVFoundation による動画撮影の設定: カメラ種類 / ズーム / 録画時間 / 画質](https://superhahnah.com/swift-avcapture-settings/)


MapViewのタップした箇所に黒丸を描画する

MapViewのタップした箇所に黒丸を描画する方法です。 タップした箇所に黒丸を描画しています。黒丸のサイズは地図に対して相対的ではなく絶対的(地図を拡大すると黒丸も大きくなる)になります。 相対的なものにしたいときはMKPointAnnotationを使うと良いかもしれません。


複数の型を持つJSONをemumでDecodeする

複数の型を持つ JSON を enum を使って Decode する方法です。 とある API を叩くと JSON が返ってきますが、その中身がポケモンなのかトレーナーなのかジムリーダーなのかわかりません。 以下のコードのように enum の Character の中に Pokemon, GymLeader, Trainer を定義することで、どのような JSON が来ても Decode できるようになります。


自分で定義したStructをUserDefaultsに保存する

自分で定義したStructをUserDefaultsに保存する方法です。 そのままでは保存することができないので、一度 JSONEncoder で Data に保存してから保存します。


Identifiableに適合していないStructでListを使う

Identifiableに適合していないStructでListを使う方法です。 id でプロパティユニークとなるプロパティを指定することで List で使うことができます。


iOSでMKMapViewの上に図形を描画する

iOSのMKMapViewの上に図形を描画する方法です。 MKPolygon を使うことで任意の多角形を描画することができます。


SwiftUIのTabViewのタブをコードから動的に切り替える

SwiftUIのTabViewのタブをコードから動的に切り替える方法です。 コードで動的にタブを切り替える方法です 参考: Programmatically change to another tab in SwiftUI


iOSでバージョンとビルド番号を取得する

iOSでバージョンとビルド番号を取得する方法です。 バージョンとビルド番号を文字列で取得します。 オプショナルで取得することになるので、if let でアンラップしてます。


SwiftUIでListにButtonを設定してパラメーターの違う画面に遷移する

SwiftUIでListにButtonを設定してパラメーターの違う画面に遷移する方法です。 詳細ページに遷移するような使い方を想定しています。


SwiftUIで少しカスタマイズしたActivityIndicatorを表示する

SwiftUIで少しカスタマイズしたActivityIndicatorを表示する方法です。背景色をつけたActivityIndicatorを表示したり隠したりしています。


Swiftでデフォルト引数を使う

Swiftでデフォルト引数を使う方法です。 favorite 関数に引数を渡さず呼び出すと "I love Snorlax が返り、任意の名前を渡すとその値が使われます。


SwiftUIでActivityIndicatorを表示する

SwiftUIでActivityIndicatorを表示する方法です。 ロード中などのくるくるするやつを表示したり隠したりしています。


SwiftUIでUIActivityViewControllerを表示する

SwiftUIでUIActivityViewControllerを表示する方法です。 ボタンを押すと URL を共有するシートを表示します。 参考: Showing ‘UIActivityViewController’ in SwiftUI


SwiftUIでSearchBar(TextField)にクリアボタンをつける

SwiftUIでSearchBar(TextField)にクリアボタンをつける方法です。 TextFiled に文字を入力するとポケモンを検索します。 そして右側のボタンを押すと TextField がクリアされます。 参考サイト SwiftUI: Add ClearButton to TextField


SwiftUIでSearchBar(TextField)を使って検索する

SwiftUIでSearchBar(TextField)を使って検索する方法です。 TextFiled に文字を入力するとポケモンを検索します。


SwiftUIのListの中にボタンを複数設置する

SwiftUIのListの中にボタンを複数設置する方法です。 buttonStyle(PlainButtonStyle()) を設定することできました。 参考サイト SwiftUI pick a value from a list with ontap gesture


SwiftUIのListでSpacerの部分にもタップ判定をつける

SwiftUIのListでSpacerの部分にもタップ判定をつける方法です。 .contentShape(Rectangle()) を設定することでタップ範囲を広げています。 参考サイト SwiftUI pick a value from a list with ontap gesture


SwiftUIでListをEditModeにして並び替える

SwiftUIでListをEditModeにして並び替える方法です。 UITableViewのEditModeのようにして並び替えることができます。 Listの中にforを定義する必要があります。最初ハマりました。


Swiftでプロジェクトの中に含まれるJSONファイルを読み込む

Swiftでプロジェクトの中に含まれるJSONファイルを読み込む方法です。 まずプロジェクトに読み込みたい JSON ファイルを追加します。 画像のように追加します。 追加した JSON ファイルの中身は以下です。 { "number": 143, "name": "Snorlax" } 次に追加した JSON ファイルをデコードするためのstructをJSON の中身に合わせて作成します。 ボタンを押すとプロジェクト中の pokemon.json を読み込み、Pokemon構造体にデコードし、State を更新させて文字列を表示しています。


SwiftUIでシートを表示し、プッシュ遷移後にシートを閉じる

SwiftUIでシートを表示し、プッシュ遷移後にシートを閉じる方法です。 遷移後のシートでもisPresentedの情報を保持するのがポイントです。


SwiftUIで初めの画面に遷移する(popToRootViewController)

SwiftUIで初めの画面に遷移する(popToRootViewController)方法です。 isDetailLink がポイントです。


Swiftで10進数を2進数に変換する

Swiftで10進数を2進数に変換する方法です。 TextFieldに数字を入力し、変換ボタンを押すと2進数に変換されます。


SwiftUIのTextFieldで表示するキーボードを指定する

SwiftUIのTextFieldで表示するキーボードを指定する方法です。 keyboardType を指定することで表示するキーボードの種類を設定することができます。


SwiftでMKMapViewに図を追加する

SwiftでMKMapViewに図を追加する方法です。 以下の例では大阪、松本、東京を結ぶ三角形を追加しています。


SwiftでMKMapViewに線を引く

SwiftでMKMapViewに線を引く方法です。 以下の例では大阪、松本、東京で線を引いています。


SwiftUIでButtonを有効にしたり無効にしたりする

SwiftUIでButtonを有効にしたり無効にしたりする方法です。 Toggleを押すとボタンが有効になったり、無効になったりします。


Swiftで配列からランダムに任意の個数抽出する

Swiftで配列からランダムに任意の個数抽出する方法です。 もっと良いやり方がありましたらTwitterなどから教えてください!


SwiftUIでViewを横スクロールで表示する

SwiftUIでViewを横スクロールで表示する方法です。 SwiftUIだと簡単に実装できて良いですね!!


QGridを使ってCollectionViewを実装する

QGridを使ってCollectionViewを実装する方法です。 iOS13のSwiftUIではCollectionViewに相当するものがありません。 QGridを使うことでCollectionViewに似たものを実装することができます。


Swiftでオンライン上のファイルを再生する

Swiftでオンライン上のファイルを再生する方法です。 簡単に実装できました。ただエラーハンドリングができないのが弱点です。


SwiftUIでアラートを入れ子にして使うことができない

SwiftUIでアラートを入れ子にして使うことができなかったのでそのメモです。 以下のコードの様に HStack の中に VStack を入れ、それぞれに .alert を使うと内側の .alert がうまく動かなかったです。 .alert は入れ子にしない方が良さそうです。


SwiftUIでボタンを押すとポップアップを表示する

SwiftUIでボタンを押すとポップアップを表示する方法です。 以下の例ではボタンを押すとアラート(中身はView)を表示しています。


SwiftUIでBMIを計算し、結果を別のViewで表示する

SwiftUIでBMIを計算し、結果を別のViewで表示する方法です。 身長と体重を入力し、計算ボタンを押すことで計算したBMIを表示しています。


@Stateと@Bindingの使い分け

@Stateと@Bindingの使い分けについです。 @State のついた変数を変更することでViewにその変更が反映されます。 以下の例ではボタンを押すことで 変数textの値を変えています。 変数textの値を変えることでその変更が反映され、文字列が変わります。


TableViewのセルを長押しでContextMenuを表示する

TableViewのセルを長押しでContextMenuを表示する方法です。 手軽にメニューが表示することができ、とても使い勝手が良いので積極的に使っていきたいです。


SwiftUIで複数のモーダルをEnumで出し分ける

SwiftUIで複数のモーダルをEnumで出し分ける方法です。 enumを使うことでスッキリと書くことができました。 iOS13では使えないので気をつけてください。


SwiftUIでフルスクリーンモーダルを表示する(iOS14以上)

SwiftUIでフルスクリーンモーダルを表示する方法です。(iOS14以上) いままでSwiftUIでフルスクリーンのモーダルを表示するのは大変でしたが、iOS14からはこの方法で表示することができるようになります。お手軽ですね。 iOS13でフルスクリーンモーダルを表示させたい場合はこの記事をご参照ください。 SwiftUIでフルスクリーンモーダルを表示する 参考: How to present a full screen modal view using fullScreenCover()


SwiftUIでモーダルを表示する時に値を渡す

SwiftUIでモーダルを表示する時に値を渡す方法です。 TextFieldでname変数に文字列を入力します。その入力した文字列をPokemonView に渡して表示しています。


Swiftで文字列を圧縮して保存し、そのデータを読み取る

Swiftで文字列を圧縮して保存し、そのデータを読み取る方法です。 zlib というアルゴリズムで文字列を圧縮し、保存しています。 Java の Deflater, Inflater に相当する方法ですが、header、チェックサムの情報が抜けている生のデータが保存されるので気をつける必要があります。 static void saveCompressedData() { try { // Encode a String into bytes String text = "hello"; byte[] data = text.getBytes(StandardCharsets.UTF_8); // Compress the bytes ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); DeflaterOutputStream outputStream = new DeflaterOutputStream(byteArrayOutputStream); outputStream.write(data); outputStream.finish() String path = "/Users/kabigon/Desktop/data.data"; try (FileOutputStream fos = new FileOutputStream(path)) { fos.write(byteArrayOutputStream.toByteArray()); } System.out.println("----------------------"); System.out.println("Save Completed!!"); System.out.println(String.format("Path: %s", path)); System.out.println("----------------------"); } catch (Exception e) { e.printStackTrace(); } } ---------------------- Java: [120, -100, -53, 72, -51, -55, -55, 7, 0, 6, 44, 2, 21] Swift: [-53, 72, -51, -55, -55, 7, 0] ---------------------- 参考: NSData > compressed(using:)


SwiftUIでAVAudioPlayerNodeで音楽を再生し、再生終了を検知する

SwiftUIでAVAudioPlayerNodeで音楽を再生し、再生終了を検知する方法です。 AVAudioPlayer は Delegate で再生終了を検知しますが、AVAudioPlayerNodeは再生終了時に呼ばれるハンドラーが用意されているのでそちらを使います。 参考: AVAudioEngine & AVAudioPlayerNode didFinish method like AVAudioPlayer


SwiftUIでAVAudioPlayerで音楽を再生し、再生終了を検知する

SwiftUIでAVAudioPlayerで音楽を再生し、再生終了を検知する方法です。 SwiftUIは struct を使うので AVAudioPlayerDelegate に準拠することができません。 そのため、ViewModel を作成し、SwiftUI(View)から呼び出してあげるます。 参考: AVAudioPlayerDelegate SwiftUI


SwiftUIを使ったTODOアプリのサンプル

SwiftUIを使ったTODOアプリのサンプルコードです。 InputView で入力した TODOは ContentView に表示されます。


AVAudioPlayerNodeを使って音楽の再生、一時停止、再生速度変更、ピッチ変更、ボリューム変更を行う

AVAudioPlayerNodeを使って音楽の再生、一時停止、再生速度変更、ピッチ変更、ボリューム変更を行う方法です。 AVAudioPlayerNodeはAVAudioPlayerではできないようなことができます。 たとえばピッチの変更などAVAudioPlayerでは実現することはできないので、AVAudioPlayerNodeを使う必要があります。


AVAudioPlayerを使って音楽の再生、一時停止、停止、ボリューム変更、再生速度変更を行う

AVAudioPlayerを使って音楽の再生、一時停止、停止、ボリューム変更、再生速度変更を行う方法です。 AVAudioPlayerを使うと簡単に音楽の再生などに関することするができます。 ただ AVAudioPlayer にできることは限られており、より複雑な操作をするためには AVAudioPlayerNode を使う必要があります。


SwiftUIでImageを長押しするとContextMenuを表示する

SwiftUIでImageを長押しするとContextMenuを表示する方法です。 アイコンが表示されているImageを長押しするとContextMenuが表示されます。 少しのコードを書くだけでリッチなUIが実現できて便利です。


ImageViewを長押しするとContextMenuを表示する

ImageViewを長押しするとUIMenuを表示する方法です。 アイコンが表示されているImageViewを長押しするとContextMenuが表示されます。 少しのコードを書くだけでリッチなUIが実現できて便利です。


SwiftUIでMapを表示してアノテーションを表示する

SwiftUIでMapを表示してアノテーションを表示する方法です。 iOS14からSwiftUIでMapKitを使えるようになりました。地図を表示するとかだけならSiwftUIで完結します。


UIStepperを使って値を増減させる

UIStepperを使って値を増減させる方法です。 UIStepperを使うと値を増減させるUIを簡単に実装することができます。


Xcodeでプロジェクトを作成してGithubにプッシュする

Xcodeでプロジェクトを作成してGithubにプッシュする忘備録です。 まずプロジェクトを作成します。 作成したプロジェクトのフォルダを SourceTree にドラッグアンドドロップします。 gitignore.ioにアクセスして .gitignore を作成します。生成された .gitignore をリポジトリ限定無視リストに貼り付けます。 新しいリポジトリを作ります。 矢印のURIをコピーします。 SourceTreeの設定からリモートリポジトリを追加します。コピーしたURIを貼り付けます。


SwiftでSpringBootで作られたAPIに文字列を渡す

SwiftでSpringBootで作られたAPIに文字列を渡した時にちょっと詰まったのでそれの忘備録です。 @RequestMapping(value = "", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") public SampleBean request(@RequestBody String text) { SampleBean sampleBean = new SampleBean(); sampleBean.setText(text); return sampleBean; } @Data public class SampleBean implements Serializable { private String text; } このような Bean を返すエンドポイントを作りました。curl コマンドでエンドポイントを叩くと以下のようなレスポンスが返ってきます。想定通りの挙動です。 curl "http://localhost:8080/sample" \ -X POST \ -H 'Content-Type: application/json' \ -d 'Kabigon' \ | jq { "text": "Kabigon" } 次にこのエンドポイントを Swift から叩きます。


TableViewでセルのロングタップを検出する

TableViewでセルのロングタップを検出する方法です。 通常のタップとロングタップをそれぞれのイベントとして取得することができます。


UIAlertControllerの中でTextFieldを使い、文字数を制限する

UIAlertControllerの中でTextFieldを使い、文字数を制限する方法です。 このサンプルでは6文字以上入力できないようにしています。


UIAlertControllerの中でTextFieldを使う

UIAlertControllerの中でTextFieldを使う方法です。 Alertの中でテキストを入力できます。


SwiftUIでMapを使う。Mapにピンを立てる

SwiftUIでMapを使う。Mapにピンを立てる方法です。 UIViewRepresentableを使って MKMapViewをSwiftUIで表示しています。


SwiftUIでViewの上にViewを重ねる

SwiftUIでViewの上にViewを重ねる方法です。 Imageの上に半透明に黒いTextを重ねています。


UIViewに影をつける

UIViewに影をつける方法です。 オレンジ色のUIView の周りに影をつけています。 影があると浮き上がって見えるの不思議ですね。


画面内にPageViewControllerがあるウォークスルー画面を実装する

画面内にPageViewControllerがあるウォークスルー画面を実装する方法です。 一番最後のページを開くとボタンの色が変わります。


SwiftUIで端末のシェイクを検知する

SwiftUIで端末のシェイクを検知する方法です。 端末をシェイクすると Text 内の文字が変わります。 ReactNativeは端末をシェイクするとデバッグメニューが出てくるのが面白いです。


SwiftUIでAppStorageを使ってUserDefaultの値を監視する

SwiftUIでAppStorageを使ってUserDefaultの値を監視する方法です。 UserDefaultが変更されると画面が再描画されます。


SwiftUIでListの中に複数のNavigationLinkを設置する

SwiftUIでListの中に複数のNavigationLinkを設置する方法です。 素直に実装すると画面遷移が暴発してしまいます。 それを修正するために List のタップジェスチャーを無効化したりする必要がありました。


ディレクトリにあるwavファイルをcafに変換する

ディレクトリにあるwavファイルをcafに変換する方法です。ディレクトリに存在する全ての.wavファイルをcafファイルに変換したいときによく使います。


ディレクトリにあるtxtファイルでループする

ディレクトリにあるtxtファイルでループする方法です。ディレクトリに存在する全ての.txtファイルに処理をしたいときによく使います。


ディレクトリにあるファイル名でループする

ディレクトリにあるファイル名でループする方法です。ディレクトリに存在する全てのファイルに処理をしたいときによく使います。


SwiftUIでVStackの周りに影をつける

SwiftでUIViewの周りに影をつける方法です。 ImageのViewの周りに影をつけています。 shadowOffset で影の位置を移動させることができ、サンプルコードでは影を右下に移動させています。


UIPageViewControllerでウォークスルー画面を実装する

UIPageViewControllerでウォークスルー画面を実装する方法です。 ウォークスルー画面はチュートリアルなどでよくありますね。


SwiftUIでViewの周りに影をつける

SwiftでUIViewの周りに影をつける方法です。 ImageのViewの周りに影をつけています。 shadowOffset で影の位置を移動させることができ、サンプルコードでは影を右下に移動させています。


Swiftで文章を読み上げる(音声合成)

Swiftで文章を読み上げる(音声合成)方法です。 AVFoundation を import し、以下のコードを書くことで iPhone に文字列を読み上げてもらうことができます。


SwiftUIでButton内の画像やテキストの色を変えない

SwiftUIでButton内の画像やテキストの色を変えない方法です。 .buttonStyle(PlainButtonStyle()) ではフルーツの一覧を表示しています。 フルーツが表示されたセルを押すと SecondView を設定することで実現できました。


SwiftUIで画面遷移時に値を渡す

SwiftUIで画面遷移時に値を渡す方法です。 ContentView ではフルーツの一覧を表示しています。 フルーツが表示されたセルを押すと SecondView に遷移し、選択されたセルのフルーツ名が表示されます。


GithubのAPIを叩き、SwiftUIでリポジトリを取得する。一番最後までいくと追加で取得しIndicator を表示する

GithubのAPIを叩き、リポジトリを取得する。一番最後までいくと追加で取得しIndicator を表示する方法です。 Infinite List Scroll with SwiftUI and Combine を参考にさせていただきました。


GithubのAPIを叩き、SwiftUIでリポジトリの情報をリストに表示する。一番下までスクロールされたら追加する

GithubのAPIを叩き、リポジトリの情報をリストに表示する。一番下までスクロールされたら追加する方法です。 Infinite List Scroll with SwiftUI and Combine を参考にさせていただきました。


GithubのAPIを叩き、SwiftUIでリポジトリの情報をリストに表示する(Combine)

GithubのAPIを叩き、リポジトリの情報をリストに表示する方法です。 Infinite List Scroll with SwiftUI and Combine を参考にさせていただきました。


GithubのAPIを叩き、SwiftUIでリポジトリの情報をリストに表示する(Closure)

GithubのAPIを叩き、SwiftUIでリポジトリの情報をリストに表示する方法です。 Infinite List Scroll with SwiftUI and Combine を参考にさせていただきました。


SwiftUIでViewを横に等間隔で横に並べる

SwiftUIでViewを横に等間隔で横に並べて表示するほうほうです。 アイコンを等間隔で表示したりするときにつかいました。


SwiftUIで画像を丸く切り取り、枠を付ける

SwiftUIで丸い枠に合わせて画像を丸く切り取り、枠を付ける方法です。 アイコンの表示する箇所などによく使います。


SwiftUIで画像をリサイズして表示(clip)

SwiftUIで画像をリサイズして表示します。 アスペクト比が異なる場合ははみ出た箇所を切り取って表示します。


SwiftUIで画像をリサイズして表示(fit)

SwiftUIで画像をリサイズして表示します。 アスペクト比が異なる場合は余白が赤色で表示されます。


Buttonを押すとTextの文字が変わる

SwiftUIでButtonが押されたら文字の色を変える方法です。 ボタンが押されたタイミングで @State var text を更新します。


SwiftUIでアラートとシートを出し分ける

SwiftUIでアラートとシートを出し分ける方法です。 TextField に入力された文字列が Double に変換できるかチェックします。 もし Double に変換できるのであればシートを表示し、もし Double に変換できないのであればアラートを表示します。


curl で iOSにVoIPプッシュを送る

curl で iOSにVoIPプッシュを送る方法です。 まず VoIPプッシュ通知用の .p12 ファイルを .pem に変換します。 openssl pkcs12 -in file-name.p12 -out file-name.pem -nodes -clcerts .pem ファイルを使ってプッシュ通知を送ります。apple の URL は配布方法によって異なるので気をつけてください。 たとえば Xcode から実機に送ると以下の URL で良いですが、TestFlightやストアから配布する場合は URL 中の develop は不要です。 curl --http2 \ -E file-name.pem \ --header "apns-topic: {YOUR_BUNDLE_ID}.voip" \ -d "{\"message\":\"Hello\"}" \ https://api.development.push.apple.com/3/device/{YOUR_TOKEN}


SwiftUIでプログラムで前の画面に戻る

SwiftUI でプログラムで前の画面に戻る方法です。 NavigationView と NavigationLink を使うと画面遷移することができます。 戻るボタンは自動で付与されますが、戻るボタン意外の方法で前の画面に戻りたいときは、PresentationMode を使うことで実現できます。


Swiftで仮引数を持つイニシャライザをスマートに書く

Swiftで仮引数を持つイニシャライザをスマートに書く方法です。 仮引数がついたイニシャライザをもち、イニシャライズ時の値を定数として保持する Struct を作る時、private(set) var name = “snorlax” を使うと短くスマートに書くことができます。 プロパティが増えてもイニシャライザを編集する必要が無くなります。


SwiftUIのTextFieldで編集中と編集完了を検知する

SwiftUIのTextFieldで編集中と編集完了を検知する方法です。 UIKit よりも少ないコードで実現できている気がします。


UIAlertControllerでアラートを表示する

UIAlertControllerを使ってアラートを出すサンプルです。 UIAlertControllerStyle.alert を UIAlertControllerStyle.actionSheet にするとニュッと下から出るタイプのアラートになります。


SwiftUIのPreviewを横向きにする

SwiftUIのPreviewを横向きにする方法です。 Previewのサイズを変更することで実現しました。 Landscape Right, Landscape Left にチェックを入れアプリを横向きにします。 Previewのサイズを端末のサイズに変更します。


Buttonからプッシュ遷移をする(NavigationLinkを無効にする)

Buttonからプッシュ遷移をする方法です。 この方法であれば、NavigationLink を擬似的に無効にすることができます。


SwiftUIでNavigationBarを隠す

SwiftUI で NavigationBar を隠す方法です。 .navigationBarHidden(true) を設定すると隠すことができます。 理由は不明ですが、空文字で仮のタイトルを設定する必要がありました。


UIGestureRecognizer でジェスチャーイベントを取得する

UIGestureRecognizer でジェスチャーイベントを取得する方法です。 UITapGestureRecognizer, UIPinchGestureRecognizer, UILongPressGestureRecognizer, UISwipeGestureRecognizer などを使ってスワイプ、ピンチなどのイベントを取得することができます。


UIPickerViewを使って値を選択する

UIPickerViewを使って値を取得するサンプルコードです。 PIPickerViewは選択肢の中から要素を選ぶときによく使いますね。 今回は食べ物とドリンクとフードを選ぶアプリを作ってみました。


iPadでモーダルのサイズを取得する

iPadでモーダルのサイズを取得する方法です。 viewWillLayoutSubviews でモーダルのサイズを取得することができます。


削除、セルの移動が可能なUITableViewを作る

削除、セルの移動が可能なUITableViewを作る方法です。 TableViewを使うと簡単に編集可能なTableViewを作ることができます。


よくあるチュートリアル画面をUIPageViewControllerとSwiftUIで作る

UIPageViewControllerとSwiftUIでよくあるチュートリアル画面を作ります。 画面をスワイプすると次の画面が表示されます。


UserDefaults に配列を保存してTableViewに表示する

UserDefaults に配列を保存してTableViewに表示する方法です。 FirstViewController のボタンを押すと UserDefaults に現在の時刻が文字列として保存されます。 SecondViewController を表示すると UserDefaults のデータが読み込まれ、テーブルに表示されます。


UINavigationBar, UITabBar の色を変える

iOSでUINavigationBar, UITabBar の色を変える方法です。 エヴァンゲリオンをイメージしたカラーリングです。今度のエヴァの映画が楽しみです。


UITabBarControllerにUINavigationControllerを入れ子で実装する

UITabBarControllerにUINavigationControllerを入れ子で実装する方法です。 ついでに色もカラフルにしてみました。


SwiftUIでUITestを動かす

SwiftUIでUITestを動かす方法です。 UIKit の時と違って sleep を入れないと良い感じに動かなかったです。 State が変わると際レンダリングが走るせいでしょうか?


SwiftUIでText中の文字の太さや色を変える

SwiftUIでText中の文字の太さや色を変える方法です。 SwiftUI で Text を結合できるのが面白いです。


SwiftUIで続きを読む。。。ボタンがあるViewを実装する

SwiftUIで続きを読む。。。ボタンがあるViewを実装する方法です。 背景を透明色にし、そのサイズを PreferenceKey で取得することで実現しています。


Swiftで録画開始とスクリーンショットが取られたことを検知する

Swiftで録画開始とスクリーンショットが取られたことを検知する方法です。 画面録画開始前に captureStatusDidChange を実行させることができるのですが、スクリーンショット撮影前に captureStatusDidChange を実行させることはできませんでした。 もしスクリーンショットを取られてしまっては不味いものがある場合、動画であれば DRM を使用したり、サードパーティーの ScreenShieldKit を使用する必要があります。


SwiftUIで閉じることができないモーダルを表示する

SwiftUIで閉じることができないモーダルを表示する方法です。 以下の記事の応用です、UIKit を使わないでもできるようになって欲しいです。 SwiftUIでフルスクリーンモーダルを表示する


SwiftUIでモーダルからフルモーダルを表示する

SwiftUIでモーダルからフルモーダルを表示する方法です。 以下の記事の改良版?です。 SwiftUIでフルスクリーンモーダルを表示する


SwiftUIでアプリ起動時に画面を遷移させる

SwiftUIでアプリ起動時に画面を遷移させる方法です。 登録の導線で途中離脱したらその途中から再開させるようなUXを実現させようとしました。 NavigationLink の isActive を使って遷移していますが、遅延時間を設定しないとアプリの挙動がおかしくなってしまうので気をつけてください。


FunctionBuilderを使ってViewに影をつける

FunctionBuilderを使ってViewに影をつける方法です。 FunctionBuilderとViewModifier、どっちを使うか迷う時が良くあります。 関連してこちらもどうぞ。 ViewModifierを使ってViewに影をつける


ViewModifierを使ってViewに影をつける

ViewModifierを使ってViewに影をつける方法です。 FunctionBuilderとViewModifier、どっちを使うか迷う時が良くあります。 関連してこちらもどうぞ。 FunctionBuilderを使ってViewに影をつける


SwiftUIでフルスクリーンモーダルを表示する

SwiftUIでフルスクリーンモーダルを表示する方法です。 SwiftにもっとAPI増えて欲しいです。


SwiftUIでNavigationViewのタイトルやテーブルビューの背景を変える

SwiftUIでNavigationViewのタイトルやテーブルビューの背景を変える方法です。 TableView と UITextView の appearance を変更しました。


SwiftUI で文字列中にタップ可能なリンクを追加する

SwiftUI で文字列中にタップ可能なリンクを追加するを作成する方法です。 UIViewRepresentable と UITextView を使って実現しました。 Reference: UITextViewにタップ可能なリンクを挿入する


SwiftでPDFを作成する

Swift で PDF を作成する方法です。 PDFKit で簡単に PDF を作ることができました、素敵ですね。 参考: Creating a PDF in Swift with PDFKit


UIActivityViewControllerでText, JSON, PDFを共有する

UIActivityViewControllerでText, JSON, PDFを共有する方法です。 簡単にファイルが共有できて実装が簡単なので重宝しています。 画像、PDFなどは Data を渡しても認識しますが、JSON などは Data を渡しても認識しないので、ファイルパスを指定しています。


SwiftUIでWebViewを表示する

SwiftUIでWebViewを表示する方法です。 UIViewRepresentable を使わなくても良い WebView が早く出て欲しいです。


SwiftUIでListの要素を削除した入り増やしたりする

SwiftUIでListの要素を削除した入り増やしたりする方法です。 Closure で渡すのはあまりよくない気がします。 もっと良い方法がありましたら教えてください。


SwiftUIでキーボードをボタンで隠す

SwiftUIでキーボードをボタンで隠す方法です。 UIApplicationを拡張して実現しています。 SwiftUIでキーボードを下げる(非表示にする)方法


SwiftUIでKeyboardの高さや出現を検知する

SwiftUIでKeyboardの高さや出現を検知する方法です。 Combineを使って実現しています。


SwiftUIで複数行の文字列を入力する

SwiftUIで複数行の文字列を入力する方法です。 UIKitのTextViewを使って実現しています。 早く公式でTextView 相当のものが出て欲しいです。


SwiftUIで下からPickerを出す

SwiftUIで下から Picker を出す方法です。 下からモーダルのように表示させています。 Importing an image into SwiftUI using UIImagePickerController


SwiftUIでUIImagePickerControllerを使う

SwiftUIでSwiftUIでUIImagePickerControllerを使う方法です。 UIKit と同じように任意の画像を取得することができました。 Importing an image into SwiftUI using UIImagePickerController


SwiftUIでButton内の画像の色を変えない

SwiftUIでButton内の画像の色を変えない方法です。 デフォルトのままだと以下の画像のように色が青く変わってしまいます。 renderingMode(.original) と設定することで、元の画像の色が表示されました。


iOS13のModalPresentationStyleを全部試してみた

iOS13のModalPresentationStyleを全部試してみました。 PopPage モーダルのことを弊社弊部所では「おしゃれモーダル」と呼んでいます。


Swiftで動画の終了を検知する

Swiftで動画の終了を検知するサンプルです。 動画はこちらのサイトからお借りしました。 Hybrid Creative Movies SAKURA こちらのサイトを参考にさせて頂きました。 動画の再生 How to detect when AVPlayer video ends playing?


Swiftで動画を再生する

Swiftで動画を再生するサンプルです。 動画はこちらのサイトからお借りしました。 Hybrid Creative Movies SAKURA こちらのサイトを参考にさせて頂きました。 動画の再生


SwiftUIでSwiftUIでサイドメニュー(ハンバーガーメニュー)を表示する

SwiftUIでサイドメニュー(ハンバーガーメニュー)を表示するサンプルです。 ドラッグで消す箇所などいくつか妥協しました。もっと良いサイドメニューをかけたら再度記事を投稿します。 How To Create A Side Menu (Hamburger Menu) In SwiftUI


SwiftUIのListのSectionの色を変える

SwiftUIのListのSectionの色を変えるサンプルです。 Appearanceを使って背景色を変えている記事がいくつかありますが、以下の方法でもできました。 Remove/change section header background color in SwiftUI List


タップでセクション区切りのListViewにチェックを入れる

タップでセクション区切りのListViewにチェックを入れるサンプルです。 タップすることで State が変化し、✔︎を描画するようになります。


タップでListViewにチェックを入れる

タップで ListView にチェックを入れるサンプルです。 タップすることで State が変化し、✔︎を描画するようになります。


SwiftでCSVを集計する

Swift で CSV を集計する方法です。 まず前処理として、CSV ファイルを utf8 に変換する必要があります。 Mac の場合は Numbers で開き、CSV で保存すると上手く行きました。 $ swift main.swift


UIViewの背景をグリッドにしたり、ドットにしたりする

UIView の背景をグリッドにしたり、ドットにしたりする方法です。 今回は GridView という UIView のサブクラスを作り、ボタンを押すことでドットが切り替わるようにしました。


ReplayKitを使って画面を録音する

ReplayKit を使うと画面を録画することができます。 凄く簡単に使うことができる上に、マイクで実況?をしたりすることができます。 今回は動画として保存しましたが、WebRTC と組み合わせたりと、いろいろなことに使うことができます。


SwiftUIでUICollectionViewのようにViewを並べる

SwiftUI で UICollectionView のように表示する方法です。 Q-Mobile/QGrid というライブラリを使うと簡単です。 QGrid を参考にしながら書いてみました。 参考: Q-Mobile/QGrid


SwiftUIでFirestoreの画像を表示する

SwiftUI で Firestore の画像を表示する方法です。 UIImage は SDWebImage を使えば簡単に表示できますが、SwiftUI ではそれができません。 SDWebImage/SDWebImageSwiftUIを使って以下のように書いてみました。 もっと良い書き方がある気がします、これだとトークンも含めてキャッシュされちゃうような。。。 参考: iOS でファイルをダウンロードする SDWebImage/SDWebImageSwiftUI


SwiftUIのToggleの変更を検知する

SwiftUIのToggleの変更を検知し、print 文を実行します。 参考: How can I trigger an action when a swiftUI toggle() is toggled?


SwiftUIで複数行のPickerを作成する

UIPickerView のような複数行の Picker を作成する方法です。 UIPickerView と使い勝手がかなり異なり、戸惑いました。 参考: Multi-Component Picker (UIPickerView) in SwiftUI 追記 iOS15では compositingGroup を追記する必要があります。


SwiftUIのPickerでLabelを表示しない

SwiftUIのPickerでLabelを表示しない方法です。 labelsHidden を設定することで可能です。 参考: How to hide the label of a Picker, Stepper, Toggle, and more using labelsHidden()


SwiftUIでPicker を表示する

SwiftUI で Picker を表示するサンプルです。 複数行の場合はこちらです。 SwiftUIで複数行のPickerを作成する 参考: Is there a way to call a function when a SwiftUI Picker selection changes?


SwiftUI で画面遷移先の View から遷移元のメソッドを呼び出す

SwiftUI で画面遷移先の View から遷移元のメソッドを呼び出すサンプルです。 delegate を使ったのですが、Combine で書いた方がよいかもしれません。


Swiftで数字が連番になった配列を作成する

Swiftで数字が連番になった配列を作成する方法です。 なかなか書き方を覚えられません。


MVPアーキテクチャを使ったサンプルアプリ

MVPアーキテクチャを使ったサンプルアプリです。 Unitテスト、UIテストも書きました。 以下のような数字を足し合わせるアプリです。 リポジトリはこちら↓ MVP-Sample


StoryboardsをiOS13以上のプロジェクトから削除する

Swift & Storyboard でファイルを作成します。 Main.storyboard を削除します。 Main storyboard file base name の項を削除する。 Application Scene Manifest -> Application Session Role -> Item0 -> Storyboard Name を削除する。 SceneDelegate.swift で表示する ViewController を設定します。 func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let windowScene = (scene as? UIWindowScene) else { return } window = UIWindow(frame: UIScreen.main.bounds) let viewController = ViewController() window?.rootViewController = viewController window?.makeKeyAndVisible() window?.windowScene = windowScene } 参考 Creating Apps Without Storyboards in iOS 13


SwiftUI でアラートを表示する

SwiftUI でアラートを表示する方法です。 UIAlertController とはかなり書き方が異なります。 Property Wrapper の @State がまだ慣れません。


Swift5.1で追加されたFunctionBuilderを使ってStructを作る

Swift5.1で追加されたFunctionBuilderを使ってStructを作る方法です。 SwiftUI でも活躍していますね。


SwiftUIでリストのセルをタップするとアラートが表示される方法

SwiftUI でリストのセルをタップするとアラートが表示される方法です。 まだまだ SwiftUI に慣れません。


SwiftUIでリストを編集する

SwiftUIでリストを編集する方法です。 UITableView よりも短いコードで書くことができました。 参考: How to enable editing on a list using EditButton


TabViewを使って画面を切り替える(SwiftUI)

TabViewを使って画面を切り替えるサンプルです。 かなり簡単に書くことができますね。 TabView - SwiftUI | Apple Developer Documentation


ListViewからそれぞれ別のViewに遷移する(SwiftUI)

設定画面のようにListViewからそれぞれ別のViewに遷移する方法が少し手間でした。 もっと良い方法がある気がします。。。


Alamofireで受け取ったJsonをCodableを使ってパースする

お天気Webサービス(Livedoor Weather Web Service) の API を Alamofire から叩き、帰ってきた JSON を struct にパースする方法です。


SwiftUIでStructが使いまわされる

画面遷移をするたびに異なる ID を表示させたかったのですが、それができませんでした。(毎回同じ ID が表示される) onDisappear で id を再生成することで回避しました。 @State に変化が無い場合はキャッシュを使い回したりするということでしょうか? 勉強していきます!!


SwiftUIでListを表示する

SwiftUI でList を表示する方法です。 画面遷移後の画面なので、NavigationBar がいます。


TableViewのセルの高さを変更する(Swift5.0.1)

TableView のセルの高さを変更する方法です。 一括で帰るときは .rowHeight を使い、個別に変えたいときは heightForRowAt を使うと実現できました。 サンプルコードはこちら。 https://github.com/takoikatakotako/swiswiswift-ios


UIButton、ボタンを表示する(Swift5.0)

UIButton を使ってボタンを表示するサンプルコードです。 角丸ボタンはよく使います。


一定間隔の値をUISlider で取得する(Swift5.0)

0, 0.5, 1.0, 1.5 …. と一定間隔の値をUISlider で取得するサンプルコードです。


UISlider で値を取得する(Swift5.0)

UISlider で値を取得するサンプルコードです。 最小値と最大値を設定することで、その間の任意の値を取ることができます。


CallKit を使って着信画面を表示する

CallKit を使うことで着信時のUIを使うことができます。 電話がかかってくるアプリを作る時に使いました。


iOSでUITest(E2Eテスト)を行う(Swift5.0)

Swift でUITest を行うサンプルコードです。 左右のテキストフィールドに数字を入れ、ボタンを押すとその積を計算するアプリを作りました。 そしてそのアプリのUITest を実装しました。 参考: 【Swift】初めてのUITest導入


RootViewController をアニメーション付きで切り替える(Swift4.2)

RootViewController をアニメーション付きで切り替えるサンプルコードです。 チュートリアルの後とかでの使用を想定しています。


ローカルのJsonファイルをParseしてテーブルビューに表示する(Swift4.2)

ローカルに追加したJsonファイルをパースし、TableViewに表示するサンプルコードです。 SwiftyJsonなどを使うともっと良い感じにかけますが、今回は使わないで書いてみました。


SwiftでUITestを導入(Swift4.2)

プロジェクトにUITestを追加します。 プロジェクト作成時に作らなかった場合は以下の画像の手順で追加することができます。 @testable import Swiswiswift(Swiswiswiftはプロジェクト名) と書くことで、テストクラスの中から参照できるようになります。 関数名の頭にtestと付けることで、テストとして実行できるようになります。


UITableViewでテーブルにアイテムを表示(Swift4.2)

UITableViewはリストのような形でテキストを表示するクラスです。データ一覧などを表示する時などに役立ちます。 UITableViewのクラス階層 NSObject ↑ UIResponder ↑ UIView ↑ UIScrollView ↑ UITableView AppleDeveloperリファレンスUITableView


NavigationControllerで画面遷移を行う(Swift4.2)

#Swift4.2 NavigationContorollerのサンプルコードです。 NavigationContorollerは横にニュッと動いて画面遷移をします。


NavigationControllerのRootを切り替える(Swift4.2)

`# Swift4.2` `setViewControllers`でNavigationControllerのRootを切り替えています。


ImagePickerControllerで画像を選択する(Swift4.2)

# Swift 4.2 Swift3の記事はこちら UIImagePickerControllerで画像の選択 iPhoneのフォトライブラリから画像を取得するサンプルプログラムです。 フォトライブラリから画像を選択するために、プロジェクトの info.plistにフォトライブラリを使用する旨を記述します。 これを書いておかないとUIImagePickerControllerは使えません。 キーの値は以下の値を使います。 NSPhotoLibraryUsageDescription TypeはStringでValueの中に使用理由を書きます。 使用理由を書かないと審査の時に落とされるらしいです。


Function(Swift4.2)

Swiftで関数を作る方法です。 最近はネット記事を見ないでも見なくても書けるようになってきました。


Array(Swift4.2)

#Swift4.2 Swiftの配列です。配列の作成と呼び出しについて記載します。 #Swift3の記事はこちら Array


Print(Swift4.2)

#Swift4.2 print文を使うことでコンソールに配列の中身や文字列などの情報を出力することができます。


UITableViewの中身をUISearchBarで検索する(Swift4)

#Swift4.2 UITableViewとUISearchBarを組み合わせたサンプルです。 ナビゲーションバーにある虫眼鏡を押すとSearchBarが現れ、そこに文字を入力することで検索結果が表示されます。 Swift3 での記事はこちら


アプリ使用中に位置情報を取得する

#Swift 4.2 アプリ使用中に緯度と経度を取得するサンプルコードです。 端末の緯度と経度が変わるとラベル文字列が更新されます。 参考 [iOS] 位置情報の取得 (Swift3編) 【CoreLocation】位置情報を取得する LocationManagerを使用する場合は、「位置情報を利用する目的」をInfo.plistに記載する必要があります。 起動中のみ位置情報を取得する場合 NSLocationWhenInUseUsageDescription このアプリは、マップで道案内するため、位置情報を取得します 常に位置情報を取得する場合 NSLocationAlwaysUsageDescription åこのアプリは、移動距離取得のため、常に位置情報を取得します 位置情報が変更されるとラベルに文字が表示されます。


Lifesumアプリのインタラクションが素敵だったので再現してみた

#Swift4.2 Lifesumというアプリの登録導線のインタラクションがとても素敵だったので再現してみました。 インタラクションの凄さと登録導線離脱率の相関が気になりますね。


押すとクニュっとするボタンを実装する

#Swift 4.2 押すとクニュっとするボタンのサンプルコードです。 iOSでよくあるマイクロインタラクションです。 僕はマイクロインタラクション大好きなんですが、エンジニアやデザイナーの自己満なんでしょうかね? わからんとです。


Alamofireを使ってAPIからJSONを取得する(Swift4.2)

古い記事(Swift3)は こちら Alamofireを使ってAPIからJSONを取得する #Xcode 10.1 #Swift 4.2 swiftの有名な通信ライブラリであるAlamofireとこれまたSwiftで有名なJSONを扱うライブラリであるSwiftyJSONを使って、 お天気APIから情報を取得するサンプルです。 今回のサンプルでは非同期でJSONを取得し、アラートを表示します。 ATS の設定も必要なのでお忘れなく。


グループスタイルのTableViewを作成する

グループスタイルのテーブルビューを表示するサンプルコードです 設定画面などはこんな感じですね。


SafeAreaを取得する

iPhoneXが登場したことで、iPhoneXのレイアウト(SafeAreaの取得)には気を使うようになりました。 SafeAreaはviewDidLayoutSubviews メソッド内で、safeAreaInsets プロパティを参照することで取得することができます。


iOSでバーコードを読み取る

Swiftでバーコードを読み取るサンプルコードです。 Swift 4.1 // 参考にさせて頂いたサイトです Swift 4でQRコードを読み取る AVFoundation(AVCaptureMetadataOutput)でバーコードリーダーを作ってみた まず、info.plistに Privacy - Camera Usage Description のキーを追加し、使用理由を記述します。 「バーコードリーダー読み込みます」などなど。 この文言は使用許可を求める時に表示されます。


CollectionViewにSearchBarをつけて検索する

コレクションビューにサーチバーとコレクションビューをつけて検索するサンプルです。


流れるように動く背景を実装する

私が作っている4択化学というアプリの背景の実装方法をたまに聞かれるので、それのサンプルコードを書きました。 アプリのアイコン画像がViewの背景を流れます。 またviewDidLoadにアニメーション関係のメソッドを書くと、NavigationBarの遷移によりアニメーションが止まってしまうことがあります。 その場合はアニメーション関係のメソッドをviewWillAppearに書き出すことで解決します。


PageViewControllerとPageControl

チュートリアル画面や電子書籍リーダーによく使われるPageViewControllerの実装サンプルです。


CustomViewをコードで実装する

コードでカスタムビューを作り表示するサンプルです。 私はxibやstoryboradを使わずに実装するのが好きですが、何がベストなのでしょうか。


UITabBarControllerにUINavigationControllerを入れ子で実装する

UITabBarControllerにUINavigationControllerを入れるコードです。 UITabBarControllerにUINavigationBarControllerを入れて実装しています。 新しい記事があります。 UITabBarControllerにUINavigationControllerを入れ子で実装する


UITabBarControllerを実装する

Viewの切り替えに使われるUITabBarControllerを実装サンプルです。 UITabBarControllerのアイコンは30×30の透過pngです。


Asset CatalogでColor Setを使って色を管理する

Xcode9(iOS 11)から、色をAssetで管理することができるようになりました。 UIColorのExtensionを作って色を登録して関数作ったりしてごにょごにょしなくて良くなりました。 色の管理がしやすくなりましたし、デザイナーさんとの連携もちょっとしやすくなったのかな?って思いました。 とても良い機能なんですが、iOS11以上でしか動かないので注意が必要です。 Deployment Targetを11.0以上にしないと警告が出ます。 Assetを開いて右クリック -> 「New Color Set」を選択 ここでは「original」という名前で濃い緑色を登録


UIViewの背景をグラデーションさせる

UIViewの背景をグラデーションさせるサンプルコードです。 参考にさせていただいたページ 【Swift x iOSアプリ開発】Viewの背景色にグラデーションを設定する方法 Swift UIViewの背景をグラデーションさせる方法 -iPhoneアプリ開発-


カスタムボタンクラスを実装する

UIButtonを拡張したカスタムボタンクラスを作成して貼り付けるサンプルコードです。 見た目を別ファイルに切り分けることでViewControllerがすっきりします。


TableViewを編集してCellを削除する(横スライド)

TableViewを編集してCellを削除するサンプルコードです。 以下の関数を追加することで、セルを横スライドで削除できる機能を付けることができます。 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath)


TableViewを編集してCellを削除する

TableViewを編集してCellを削除するサンプルコードです。 NavigationBarに編集ボタンを追加し、そのボタンを押すことでセルを削除することができます。 NavigationControllerについてはこの記事を参考にしてください。 NavigationControllerを実装する


数字を三桁ごとにカンマ区切りにする(日本円の表示)

日本円を表示するときのように3桁ごと,で区切る方法を調べてみました。 123,456,789円 みたいな感じです。 参考に指せて頂いた記事 [Swift]数字を三桁ごとにカンマ区切りにする


現在の日付と曜日、現在時間を取得する

Swift4.1で現在の日付と曜日、現在時間を取得するサンプルコードです。 以下の形式の文字列で取得してくれます。 2018/04/03 (木) 19:03:34 上のような形式で取得するサンプルコードです。 Calendar.currentで取得すると、設定によっては和暦(平成〇〇年)で取得してしまう可能性があるので(2018/04/03が欲しいのに30/04/03が帰ってくる)、グレゴリオ暦で取得する方が無難です。 逆に和暦が欲しいときは和暦で取得する方法もあります。 このサイトが詳しいです。 Swift 3 の日時操作チートシート その他参考にさせていただいたサイト Swift3での日時に関する処理 【Swift3】現在時刻の取得とDataFormatterでの文字列化


CustomTableViewCellとaccessoryViewを使ってTableVIewのレイアウトをカスタマイズ

CustomTableViewCellを作ると好きなレイアウトのCellをTableViewで使うことができます。 そしてTableViewCellのアクセサリービューにはUISwitchやチェックマークなどのアクセサリをつけることができます。 今回はその両方を使ったサンプルコードです。 参考にさせて頂いたウェブサイト [Swift]UITableViewCellのaccessoryViewでaccessoryButtonTappedForRowWithIndexPathが来ない件の対応


UIAlertControllerにTextFieldを追加する

UIAlertControllerにTextFieldを追加したサンプルです。


NavigationControllerを実装する

NavigationContorollerのサンプルコードです。 NavigationContorollerは横にニュッと動いて画面遷移をします。


文字列やURLからQRコードを生成する

文字列やURLからQRコードを生成するサンプルコードです。 This is a sample code that generates a QR code from a character string or URL. これらの記事を参考にさせていただきました。 CIImageをData型に変換したときにハマった時の対処法(Swift3.0) SwiftでQRコードを生成してみた 生成したQRコードはこちらです。


UIAlertControllerでアラートを表示する

UIAlertControllerを使ってアラートを出すサンプルです。 UIAlertControllerStyle.alert をUIAlertControllerStyle.actionSheet にするとニュッと下から出るタイプのアラートになります。


UIAlertControllerで下からニュッと出す(UIActionSheet)

下からニュッと出てくるアラートはUIAlertControllerを用いて実装します。 遥か昔、下からニュッと出てくるアラートはUIActionSheetなんて呼ばれている時期もありましたが、UIAlertControllerに統合されました。


列挙型 enum

列挙型、enumの書き方のサンプルコードです。 ここではpersonというクラスを作り、カビゴンさんの名前と出身地をenumを用いて登録しています。


UserDefaultsを使ってパラメーターを保存する

UserDefaultsはアプリを落としても保持しておきたいデータを保存するときに使います。 使い方はいたってシンプルです。 サンプルコードでは、まず最初に userDefaults.register(defaults: ["KEY_LabelText": "Hello"]) で初期値を設定しています。 .register() はとても便利で、指定したキーに対応するデータが存在しない場合に、初期値を入れてくれます。 次にラベルにUserDefaultで保存した値を読み取り、ラベルのテキストに反映。 そしてボタンを押されたらuserdefaultsとラベルの値を更新しています。


UIPickerViewを使って値を選択する

はいどーも! UIPickerViewを使って値を取得するサンプルコードです。 PIPickerViewは選択肢の中から要素を選ぶときによく使いますね。 今回は食べ物とドリンクとフードを選ぶアプリを作ってみました。 新しい記事は こちら AppleDeveloperDocuments UIPickerView


一定時間で繰り返しを行う

Timeを使って3秒ごとに繰り返しを行います。 時計のような機能を持つアプリを作る時に使いました。


カスタムレイアウトを持つコレクションビューをつくる

今作成しているアプリに画像が入れ子となったデザインをつくることになったので、実装方法について調べました。 主なコードは以下のサイトを参考にさせていただきました。 本当にありがとうございました。 Swift2->4の変換は大変でした。。。 iOS UICollecionViewFlowLayout でカスタムレイアウトを作ろう ~ Swift版


SwiftでUDP通信を行い、文字列を送る

SwiftでUDP通信するメモです。 SwiftSocket をcocoapodsで入れて、こんな感じで書きました。 woom-02と通信するのに使いました。


Swift3からSwift4への移行時に出る@objc inference warningsを消す

Xcode8からXcode9へ乗り換えてSwift4へ変換すると以下のエラーが出ます。それの消し方です。 The use of Swift 3 @objc inference in Swift 4 mode is deprecated. Please address deprecated @objc inference warnings, test your code with “Use of deprecated Swift 3 @objc inference” logging enabled, and then disable inference by changing the "Swift 3 @objc Inference" build setting to "Default" for the "TargetName" target. 各ターゲットを選択 -> Build Settings -> 検索窓で inference と検索 -> Swift @objc inference を Default に設定する 他にもターゲット(UITest,UnitTest)がある場合はそれも Default に設定する。 これで消えるはずです!


UIScrollViewで画像をピンチで拡大したり縮小する

UIScrollViewの中にある画像を拡大したり縮小するサンプルです。 ピンチで画像を大きくしたり、小さくします。


○秒後に実行させる、毎秒実行する

Swiftで数秒後に実行する、毎秒実行させるサンプルです。 一秒ごとにコンソールに出力されます。


UITableViewにヘッダーを設定する

UITableViewにヘッダーを設定するサンプルです。 フッターも同様に設定することができます。


UICollectionViewにCustomセルを追加する

UICollectionViewにCustumCollectionセルを追加してみました。 クラス名を文字列に変換する NSStringFromClass(CustumCollectionViewCell.self) は、UITableViewやUICollectionView を使うときにとても便利です。


UICollectionView

新しい記事 があります。 UICollectionViewのサンプルです。 UICollectionViewを使う を参考にさせていただきました。 このサイトは見やすくて、swiftをやる人にとてもオススメです。 makeColor() 関数でランダムに生成した色をセルに入れています。 スクロールするたびに色が変わります。


Alamofireを使ってAPIからJSONを取得する

新しい記事(Swift4)はこちらAlamofireを使ってAPIからJSONを取得する(Swift4.2) swiftの有名な通信ライブラリである Alamofire とこれまたSwiftで有名なJSONを扱うライブラリであるSwiftyJSONを使って、お天気API から情報を取得するサンプルです。 今回のサンプルでは非同期でJSONを取得し、アラートを表示します。


delegateで別のViewからメソッドを呼び出す

あるViewから他のViewControllerにある関数などを実行するデリゲートのサンプルです。 今回はモーダル表示したViewから、元々いたViewの背景色をデリゲートを使って変えています。


Swiftでクラス名と関数名と行番号を取得、表示する

「ここは動いたらヤバい!」的な箇所に書くとでデバックが捗ります。 クラス名と行番号、取得表示することができます。 print("Class name : \(NSStringFromClass(type(of: self))) ") print(#function, #line)


UIImagePickerControllerで画像の選択

iPhoneのフォトライブラリから画像を取得するサンプルプログラムです。 フォトライブラリから画像を選択するために、プロジェクトの info.plist にフォトライブラリを使用する旨を記述します。 これを書いておかないとUIImagePickerControllerは使えません。 キーの値は以下の値を使います。 NSPhotoLibraryUsageDescription Typeは String でValueの中に使用理由を書きます。 使用理由を書かないと審査の時に落とされるらしいです。 下の画像のような感じです。 コードは以下のようになります。


Swiftで音楽を再生する

Swiftで音楽を簡単に再生するサンプルコードです。 リピート再生も簡単にできました。 サンプルコードにはないですが、ちゃんとエラーハンドリングしましょう。


UIStatusBarを白くする

UIStatusBarを白くする方法についてです。 UIStatusBarを白くする方法その1 UIStatusBarを白くする方法その1です。特定のViewControllerを白くする方法です。白くしたいUIViewControllerに書きます。 NavigationController以下にあるStatusBarはこの方法では白くはなりませんので注意してください。 UIStatusBarを白くする方法その2 全てのStatusBarを白くする方法です。 プロジェクトのターゲットのinfoに[Status bar style]と[UIStatusBarStyleLightContent]、[View controller-based status bar appearance]と[NO]を追加します。NavigationController以下にあるStatusBarも白くなります。 わかりやすいようにViewの背景色をオレンジにしています。


UITableViewとUISearchBar

UITableViewとUISearchBarを組み合わせたサンプルです。 ナビゲーションバーにある虫眼鏡を押すとSearchBarが現れ、そこに文字を入力することで検索結果が表示されます。 UITableView 基本的なテーブルビューの例文を以下に示します。


UserNotification(LocalNotification)

UserNotificationはユーザーに対して通知を発行する時に使用します。 UserNotificationは大きく分けて二種類あり、外部から通知を発行できるRemoteNotification(LineやTwitterのような通知)とLocalNotification(時計アプリなどの内部的に発行する通知)があります。 ここではLocalNotificationを取り扱います。 UserNotificationサンプル 初めにオリジナル通知音の発行に使用する音データ(.cafファイル)をプロジェクトに登録します。 .caf ファイルをプロジェクトに追加し、BundleResoucesに登録されていることを確認します。 また使用したcafファイルはこちらです。 UserNotificationの仕様として、使用するオリジナル通知音に不具合がある場合、デフォルトの通知音が再生されます。


音声認識(SFSpeechRecognizer)

iOS10からSpeech Frameworkが登場しました。 ここではSFSpeechRecognizerを使って音声認識をしてみようと思います。 そしてシミュレーターでは動かないから気をつけてください。 参考: AppleDeveloper:SpeakToMe: Using Speech Recognition with AVAudioEngine 参考: あたも開発ブログ 参考: 【iOS 10】Speechフレームワークで音声認識 – 対応言語リスト付き プライバシー設定をinfo.plistに記入 iOS10になってから、プライバシーに関する機能(通知、カメラ、フォトライブラリへのアクセス)を使う際に、Info.plistにあらかじめ使うことを書いておかないとアプリが落ちてしまうようになりました。 音声認識機能を使う場合は以下のプライバシー設定を行う必要があります。 参考: アプリ開発ブログ(仮) info.plistを開き、Privacy – Speech Recognition Usage DescriptionをStringで追加し、右側に使用目的を記入します。 Privacy – Microphone Usage Description to practice programingもまたStringで追加し、右側に使用目的を記入します。 使用目的が書かれていないと審査で落とされるらしいです。 サンプルコード 音声認識の結果をAlertで表示するプログラムです。


UITextField

UITextFieldは文字の入力に使われます。 UITextFieldのクラス階層 NSObject ↑ UIResponder ↑ UIView ↑ UIControl ↑ UITextField AppleDeveloperリファレンスUITextField UITextField例文 UITextField、生成し、ボタンが押されるとUITextFieldから文字列を取り出してラベルにコピーします。


UINavigationBar

iOSアプリの画面上部によく使われているUINavigationBarについてです。 UINavigationBarのクラス階層 NSObject ↑ UIResponder ↑ UIView ↑ UINavigationBar AppleDeveloperリファレンスUINavigationBar UINavigationBar例文 UINavigationBarを生成し、タイトルとボタンを付けます。


UILabel

UILabelクラスは文字表示を管理するクラスです。画面に文字を表示させたい時に使用します。 UILabelのクラス階層 NSObject ↑ UIResponder ↑ UIView ↑ UILabel AppleDeveloperリファレンス UILabel UILabelサンプル サンプルコード


現在時刻の取得

現在時間を取得します。 AppleDeveloperリファレンスNSCalender サンプルプログラム 以下に示します


UITableView

UITableViewはリストのような形でテキストを表示するクラスです。データ一覧などを表示する時などに役立ちます。 UITableViewのクラス階層 NSObject ↑ UIResponder ↑ UIView ↑ UIScrollView ↑ UITableView AppleDeveloperリファレンスUITableView UITableView


UIButton

UIButtonクラスはボタンを設置するためのクラスです。 ボタンタップでアクションを起こすことができます。 UIButtonのクラス階層 NSObject ↑ UIResponder ↑ UIView ↑ UIControl ↑ UIButton AppleDeveloperリファレンスUIButton UIButton例文 様々なUIButtonのサンプルです


UIBarButtonItem

UINavigationBarの要素追加、カスタマイズに用いられるUIBarButtonItemについてです。 UIBarButtonItemのクラス階層 NSObject ↑ UIBarItem ↑ UIBarButtonItem AppleDeveloperリファレンスUIBarButtonItem UIBarButtonItem例文 UINavigationBarを生成し、タイトルとボタンを付けます。


Dictionary

Swiftの辞書配列です。 辞書配列の作成と呼び出しについて記載します。 人によって辞書配列だったり、ハッシュだったり、マップだったりと、言い方が違うのが好きです。


Array

配列の書き方 Swiftの配列です。配列の作成と呼び出しについて記載します。