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をフェッチする方法です。 従来の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を移動させています。
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() 関数でランダムに生成した色をセルに入れています。 スクロールするたびに色が変わります。
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
Swiftでプロジェクトの中に含まれるJSONファイルを読み込む
Swiftでプロジェクトの中に含まれるJSONファイルを読み込む方法です。 まずプロジェクトに読み込みたい JSON ファイルを追加します。 画像のように追加します。 追加した JSON ファイルの中身は以下です。 { "number": 143, "name": "Snorlax" } 次に追加した JSON ファイルをデコードするためのstructをJSON の中身に合わせて作成します。 ボタンを押すとプロジェクト中の pokemon.json を読み込み、Pokemon構造体にデコードし、State を更新させて文字列を表示しています。
TableViewのセルを長押しでContextMenuを表示する
TableViewのセルを長押しでContextMenuを表示する方法です。 手軽にメニューが表示することができ、とても使い勝手が良いので積極的に使っていきたいです。
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で完結します。
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 コマンドに翻訳すると以下になります。
UIAlertControllerの中でTextFieldを使い、文字数を制限する
UIAlertControllerの中でTextFieldを使い、文字数を制限する方法です。 このサンプルでは6文字以上入力できないようにしています。
SwiftUIでMapを使う。Mapにピンを立てる
SwiftUIでMapを使う。Mapにピンを立てる方法です。 UIViewRepresentableを使って MKMapViewをSwiftUIで表示しています。
画面内に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ファイルに変換したいときによく使います。
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は選択肢の中から要素を選ぶときによく使いますね。 今回は食べ物とドリンクとフードを選ぶアプリを作ってみました。
削除、セルの移動が可能な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でアプリ起動時に画面を遷移させる方法です。 登録の導線で途中離脱したらその途中から再開させるようなUXを実現させようとしました。 NavigationLink の isActive を使って遷移していますが、遅延時間を設定しないとアプリの挙動がおかしくなってしまうので気をつけてください。
FunctionBuilderを使ってViewに影をつける
FunctionBuilderを使ってViewに影をつける方法です。 FunctionBuilderとViewModifier、どっちを使うか迷う時が良くあります。 関連してこちらもどうぞ。 ViewModifierを使ってViewに影をつける
ViewModifierを使ってViewに影をつける
ViewModifierを使ってViewに影をつける方法です。 FunctionBuilderとViewModifier、どっちを使うか迷う時が良くあります。 関連してこちらもどうぞ。 FunctionBuilderを使ってViewに影をつける
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でListの要素を削除した入り増やしたりする
SwiftUIでListの要素を削除した入り増やしたりする方法です。 Closure で渡すのはあまりよくない気がします。 もっと良い方法がありましたら教えてください。
SwiftUIでキーボードをボタンで隠す
SwiftUIでキーボードをボタンで隠す方法です。 UIApplicationを拡張して実現しています。 SwiftUIでキーボードを下げる(非表示にする)方法
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 が変化し、✔︎を描画するようになります。
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 で書いた方がよいかもしれません。
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
Alamofireで受け取ったJsonをCodableを使ってパースする
お天気Webサービス(Livedoor Weather Web Service) の API を Alamofire から叩き、帰ってきた JSON を struct にパースする方法です。
SwiftUIでStructが使いまわされる
画面遷移をするたびに異なる ID を表示させたかったのですが、それができませんでした。(毎回同じ ID が表示される) onDisappear で id を再生成することで回避しました。 @State に変化が無い場合はキャッシュを使い回したりするということでしょうか? 勉強していきます!!
TableViewのセルの高さを変更する(Swift5.0.1)
TableView のセルの高さを変更する方法です。 一括で帰るときは .rowHeight を使い、個別に変えたいときは heightForRowAt を使うと実現できました。 サンプルコードはこちら。 https://github.com/takoikatakotako/swiswiswift-ios
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を切り替えています。