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

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


SwiftでJSONをDictonaryでDecodeする

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


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

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


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


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

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


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

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


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]


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.


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

iOS15でPickerを横に並べるとタップ領域が重なってしまう不具合に悩まされたのでその忘備録です。 以下の様なコードをiOS15の実機で実行し、左側の行を動かそうとすると右側の行が動いてしまいます。iOS14やシミュレーターでは問題なく動作します。 Pickerを複数並べると.clip()を使ってもタップ領域が広がってしまうって問題です! View Hierarchyを見たところ、タップ領域がclipされていないことが原因かと思われます。 Apple Developer Technical Support に助けを求めたところ「現時点では回避策がない既知の問題です。」と言われたので UIViewRepresentable を使って自分で作るしかなさそうです。


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

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


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 と同じ行に書いたコードは実行される。もちろんそれよりも下の行は実行されない。


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


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

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


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

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


SwiftでMKMapViewに図を追加する

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


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

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


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

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


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 から叩きます。 レスポンスを SampleBean にデコードしてその中の text プロパティを表示すると ダブルクオート付きの文字列が表示されてしまいます。 それはSwift がダブルクオートを含めて Spring 側にデータを送信しているからです。 Swiftが行っているリクエストを curl コマンドに翻訳すると以下になります。


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でウォークスルー画面を実装する方法です。 ウォークスルー画面はチュートリアルなどでよくありますね。


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

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


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” を使うと短くスマートに書くことができます。 プロパティが増えてもイニシャライザを編集する必要が無くなります。


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を作ることができます。


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

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


UINavigationBar, UITabBar の色を変える

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


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

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


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

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


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

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


シミュレーターのスクリーンショットを影無しで撮影する(ツールバー無しで撮影する)

シミュレーターのスクリーンショットを影無しで撮影する(ツールバー無しで撮影する)方法です。 command + shift + 4 でスクリーンショットの撮影モードにしたあとに、スペースで撮影対象となる画面を選択し、クリックすることでスクリーンショットを撮ることができます。 そのときに option を押ながら撮影することで影無しでスクリーンショットを撮ることができます。 そして、ツールバーを画像編集ツールで取り除けば、ツールバー無しのスクリーンショット画像が手に入ります。 通常の方法で撮ったスクリーンショット 影無しで撮ったスクリーンショット


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


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

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


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 がいます。