- 1. VNRequestのメモリ使用を減らすコツ
- 2. [WIP]CleanArchitecture + RxSwiftで見通しを良くするための気付き
- 3. ARKit+SceneKit で 地面崩落
- 4. SwiftUIでサイドメニューの実装
- 5. 宣言的UIフレームワークでのラジオボタン(選択UI)実装方法の確認(Compose、SwiftUI、Flutter)
- 6. 【Swift】extensionを使おう
- 7. 【Swift】Cのsprinftfみたいなことをしたい
- 8. 【Swift】あるモノを一意に識別するためのIDを生成する方法(UUIDの利用)
- 9. 【Swift】クリップボードに文字列をコピーする
- 10. 【Xcode】Archive→ipa作成まで
- 11. 【Swift】Table View Cell、外部URLへ飛ぶ方法
- 12. iOS14から始めるピクチャ・イン・ピクチャ
- 13. 【iOS】画像が一色に塗りつぶされてしまうときの対処法
- 14. [Swift]Bool型について要約
- 15. プロトコルとクラスと構造体の違いをざっくり理解しよう!
- 16. GitHubActionsにてCookiecutterで作ったiOS向けボイラープレートをCIしてみた
- 17. iOS(iPad/iPhone)Safariでのデスクトップ用ページの開き方と挙動の違い
- 18. 【Core ML】YOLO v3をCoreMLに変換する方法
- 19. 実機テストってどうやるの?
- 20. [Swift]配列の要素数を取得する方法(超基礎)
VNRequestのメモリ使用を減らすコツ
CompletionHandlerをつかいます。
これが絶対なのかはわかりませんが、手元のDeepLabV3でCoreMLHelpersを利用した場合、30枚画像を処理して400MBメモリ使用量が下がりました。なのでいちおう共有するという感じで。#Good
CompletionHandlerがあるとき?“`swift
lazy var model:VNCoreMLModel = try! VNCoreMLModel(for: DeepLabV3(configuration: MLModelConfiguration()).model)
lazy var request:VNCoreMLRequest? = {
let model = self.model
let request = VNCoreMLRequest(model: model, completionHandler: completionHandler)
request.imageCropAndScaleOption = .scaleFill
return request
}()
`
[WIP]CleanArchitecture + RxSwiftで見通しを良くするための気付き
### Clean Architecture
– ざっくり言うとコードを役割事に細かく分ける。
– ファイル数が多くなるので、ファイル自動生成ツールを使うと捗る。
– https://dev.classmethod.jp/articles/making-progress-ios-dev-using-kuri/
– ViewControllerの肥大化を解消するためであるから、(画面数が多くても)一画面1APIくらいの場合はここまでファイルを分けても冗長なだけかもしれない。その場合はViewControllerが大体の処理を担当したとしても、そんなに肥大化しないためである。
– https://qiita.com/yamshta/items/de7ea5fc2594b8da5988
– フォルダの分け方は色々ある。現状は、Modelは一まとめにして1フォルダに入れる。他のファイルは、シーンごとに分けるで行こう。### Rx
– Rxプロジェクト全体の構成
– なるべく循環参照をしない。片側(View Controller側)が他方(Modelに近い方)をプロパ
ARKit+SceneKit で 地面崩落
カメラのキャプチャをその場所に置く仮想オブジェクトのテクスチャにする&ポータルの組み合わせを試してみた。題材として地面を崩落させてみる。
完成イメージ
![demo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71605/2528f5a5-f6cc-cfe8-166f-f2c177c8bb34.png) ![demo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71605/e944432c-cfc7-b1f9-9345-49df318ea433.gif)
このように仮想オブジェクトにカメラのキャプチャ画像を貼ることができれば、地面を階段状にしたり、壁を開き扉にしたり等の演出も可能。## 地面の崩壊のさせ方
①地面に埋め込む箱状の3Dモデル(以下、「グリッド」)を準備。
グリッドの上部には小さな箱(以下、「セル」)を10x10で敷き詰めておく。
セルが崩れてグリッドの底に溜まるようにする。
②ARKitの
SwiftUIでサイドメニューの実装
SwiftUIでサイドメニューを再現してみました。
ドラッグやタップで表示、非表示にできます。
# 環境
– xcode12.1
– Swift 5![slidemenu.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272984/bac92972-f12f-3ae5-20f0-f05eec734ea9.gif)
# イメージ
ピンク メニュー
青 ホーム
黒枠 見えているところ
宣言的UIフレームワークでのラジオボタン(選択UI)実装方法の確認(Compose、SwiftUI、Flutter)
### 実装の狙い
![スクリーンショット 2020-10-31 19.20.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4493/ef320b61-9b18-f9b8-1aa9-ae7444502b7d.png)
上記のようにユーザーの入力などUIイベントの発生から画面の更新までを単一方向のフローで処理するための、基本的な実装についての確認です。
また、選択UIというのは非宣言的UIフレームワークにおいては、UI側に状態を持たせる実装になることが多いため、宣言的UIフレームワークにおいての実装のためのインターフェイスを確認する目的もあります。### 今回実装したものについて
– 色の選択肢を複数の中から選択UIによって一つ選択できるようにする
– 前面の**小さな方**の四角い枠のバックグラウンドは今、選択UIで選択されている色を表示する
– その四角い枠の背面にはみ出ている**大きな方**の四角い枠のバックグラウンドには現在選択されたものより一つ前の選択されたものを表示する以下
【Swift】extensionを使おう
##はじめに
Swiftにはextensionという仕組みがあります。
クラスを継承せずとも、既存クラスに機能を追加できる、という大変便利な機能です。開発するアプリに実装する処理内容が多くなってきても、extensionを有効活用することで簡潔なコードで表現しやすくなります。
脱初心者を目指す上で理解必須の仕組みだと思います。##例1: Date型に日付文字列を生成するメソッドを追加
“`swift:DateExtension.swift
extension Date {
func getDateTimeString() -> String {
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: “en_US_POSIX”)
dateFormatter.timeZone = TimeZone.current
dateFormatter.dateFormat = “yyyy/MM/dd HH:mm:
【Swift】Cのsprinftfみたいなことをしたい
##やりたいこと
指定したフォーマットに従って、指定した値を文字列にして表示したい。
要は C言語でいうところの下記みたいなことをしたい。“`c:sprintf.c
sprintf(str, “%.2f”, pi)
“`##実装方法
String型のイニシャライザに、format文字列を引数に取るものがあるので、それを使います。
“`swift:stringformat.swift
let pi = 3.14159
let str = String(format: “%.2f”, pi)
print(str)
“`“`text:出力結果
3.14
“`四捨五入して整数表記で表示する場合などにも利用できます。
“`swift:stringformat2.swift
let height = 182.9
let str = String(format: “%.0f”, height)
print(str)
“`“`text:出力結果
183
“`String型を引数に取ることもできます。
この場合にはフォーマット文字列は `%@` を使
【Swift】あるモノを一意に識別するためのIDを生成する方法(UUIDの利用)
##やりたいこと
アプリ内であるモノを一意に識別するためのID(ユニークなID)が必要なシーンは比較的よくあると思います。
主に何かと何かを紐付ける必要がある場合、がそれにあたるかと思います。このような場合、簡単に思いつくところだと、
* 連番をふる
* 時刻を使用した文字列を作るなどがありますが、処理の並列度が高い場合などはこれらの方法では必ずしも十分ではないかもしれません。
簡単に一意なIDを生成する方法があります。UUIDというものを使います。
##UUIDとは
ソフトウェア上でオブジェクトを一意に識別するための識別子で128bitの数値で表されます。
衝突を避けるような生成方法も含めて規格化されています。文字列として表記する場合、`550e8400-e29b-41d4-a716-446655440000` のような16進数表記で表されます。
SwiftにもこのUUIDを生成する機能が標準で用意されています。
##UUIDの生成方法
UUIDを生成して、それを16進数表記文字列にして、プリントする処理は下記のように実装できます。
“`swift
【Swift】クリップボードに文字列をコピーする
##やりたいこと
iOSアプリからクリップボードに文字列をコピーする。
アプリ開発していると時折必要となる要件かと思います。##実装方法
実装方法は非常に簡単です。1行でできます。ライブラリのインポートも必要はありません。
“`swift:copy2clipboard.swift
UIPasteboard.general.string = “コピーしたい文字列”
“`##動作確認環境
Xcode: 11.7
iOS: 13.7
Swiftバージョン: Swift5以上
【Xcode】Archive→ipa作成まで
キャプチャ多め
2020/10/30現在のキャプチャです
Xcode ver 11.3
#想定
動作確認をしたい人が遠方にいて
サクッと現状のアプリを試しに手元の端末で使ってみたい時。
ストア経由のAdHoc配布、Enterprise配布等ありますが、
今回は審査もなく手頃な方法の後述する**Development**で進めます。#まずアーカイブ
ipaを作るにはアーカイブが必要なので実行します。
Xcodeの `Product → Archive `でアーカイブ実行できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/829684/644a4a82-d2f1-6c89-1037-884218e6c4bc.png)**Archiveがグレーアウトして実行できない時**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/829684/cc79e775-ce0e-f51c-7f16-
【Swift】Table View Cell、外部URLへ飛ぶ方法
#はじめに
TableViewCellを使用し、アプリに自分のホームページのリンクを貼りたいと思ったのですが、すぐに検索できなかったので覚え書きとして記載しておこうと思います。
※初学者のため、もし間違いがあれば教えていただけると幸いです。#完成品
今回の説明ではTabelViewCellの「Google」をタップすると「Google」のページへ飛ぶようにしています。
※今回、Googleさんのページを見本に使わせていただきました。
![ezgif.com-gif-maker.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/683624/0134afa5-0cf9-935c-5c25-0810fe88841c.gif)#Story boardにTable Viewをセット
![スクリーンショット 2020-10-30 6.24.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/683624/9118a0b9-9
iOS14から始めるピクチャ・イン・ピクチャ
# 1. はじめに
iPadではすでに導入されていたピクチャ・イン・ピクチャがiOSにも対応しました。
これからアプリケーションに導入するに当たっての流れを記述します。# 2. ピクチャ・イン・ピクチャについて
ピクチャ・イン・ピクチャを導入することにより、動画再生が他アプリ上でも可能になります。また、アプリケーションがピクチャ・イン・ピクチャに対応しており、
自動再生が有効になっていればホームボタンを押した時に開始されるようになっています。## 2-1. ピクチャ・イン・ピクチャの自動再生について
アプリケーションがピクチャ・イン・ピクチャに対応している場合、
視聴中にホームボタンを押した場合の挙動設定が設定アプリに存在します。### 2-1-1. 設定アプリの項目追加箇所
iPhoneを利用している一般的なユーザーはなかなか気付いていないと思います。
設定アプリの2階層程潜った箇所に追加されています。|項目|iOS14|iPadOS13|
|—|—|—|
|階層|設定 → 一般 → ピクチャ・イン・ピクチャ|設定 → ホーム画面とDock → マルチ
【iOS】画像が一色に塗りつぶされてしまうときの対処法
NavigationBarにオリジナルの画像を置いて、少しリッチにしたいこと、ありますよね?
そのとき、いつものやり方でやろうとすると青一色で表示されてしまいます。・理想
・現実
こうなることを回避するためにどうすればいいのか、備忘録的に残しておきたいと思います。
## いつものやり方
まずはいつもどおりにやってみます。コードで書くとこんな感じでしょうか
“`swift
override func viewDidLoad() {
su
[Swift]Bool型について要約
## はじめに
今回は`Bool型`についてアウトプットします。というのも、`String型`や`Int型`については説明できるものの、Bool型については言語化できていなかったのでこの場で改めてアウトプット。## Bool型とは
プログラミング言語の世界には`真理値`という概念が存在する。その真理値を表す方が`Bool型`である。
真理値を表すリテラルには、`true`と`false`があり、変数に`true`または`false`を代入すると暗黙の型として`Bool型`が割り当てられる。“`
var sample = true //Bool型
“`## Bool型の活用法
Bool型は`論理演算`に使用される。演算とはデータにあにかしらの加工を施してその結果の値を得ることです。## 論理演算と演算子
|種類|内容|使用する演算子|
|——|—-|——-|
|否定|真理値の真偽を反対にする|前置演算子!
|論理和|複数の真理値のどちらかが真なら真|中値演算子|||
|論理積|複数の真理値のどちらも真なら真|中置演算子&&|## 論理演算の例
プロトコルとクラスと構造体の違いをざっくり理解しよう!
今回は、,プロトコル、クラス、構造体の違いについて学習したので、アウトプットしていきます
※以下の内容は、学習内容のアウトプット用のため、誤りがある場合があります。予めご了承ください#プロトコルとは?
プロトコル(protocol)とは、直訳すると「条約」、「議定書」、「規約」のような意味になります。
Swiftの言語においては「開発者とSwift言語との約束ごと」を意味します.まずは、宣言の書き方を見ていきましょう。
“`swift:qiita.rbvar
protocol <プロトコル名> {
}
“`
基本的にこのような形で宣言します。classとの違いは、「class」というキーワードが「protocol」になっただけです。
では、さらに深堀りしていきましょう。#プロトコルでのメソッド
ここからが、プロトコルとクラスの明確な違いですが、***プロトコルではメソッドを書く時メソッドの中身を書きません。***
書き方は以下のようになります。“`swift:qiita.rbvar
protocol <プロトコル名> {
func<メソッド名>()
GitHubActionsにてCookiecutterで作ったiOS向けボイラープレートをCIしてみた
## はじめに
[以前投稿したCookiecutter用のiOS向けのボイラープレート](https://qiita.com/satoshin2071/items/82777dee4dbad5f04f94)を
今後も有効利用すべくGithubActionsで回してみた際の備忘録です。**※GithubActions や Cookiecutter等の説明は省略します**
## GitHubActionsで設定しているyml
https://github.com/SatoshiN303/iOS-Blueprints-CleanArchitecture/blob/master/.github/workflows/swift.yml
![スクリーンショット 2020-10-30 0.17.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6691/9e96718c-a0a3-60b9-0d8d-05c8ad89aa4d.png)
### 前半部分: 実行環境の設定
前半部分でビルドをするため
iOS(iPad/iPhone)Safariでのデスクトップ用ページの開き方と挙動の違い
iOS Safariでデスクトップ用サイトを表示する方法と、挙動についてまとめました。
## SafariからPC用ページを開く方法
SafariからPC用ページを開く方法は以下の2通りがあります。
① OSの設定 > Safari > デスクトップ用Webサイトを表示の項目をONにする
② SafariでWebページを開く > ヘッダーの「デスクトップ用Webサイトを表示」をTapする
※ スマホ用(モバイル用)を表示したいときは、↑の部分が「モバイル用Webサイトを表示」に変わっている#### ① OSの設定 > Safari > デスクトップ用Webサイトを表示の項目をONにする
[![Image from Gyazo](https://i.gyazo.com/162ab3e56ee9029080ba501d7056a68b.png)](https://gyazo.com/162ab3e56ee9029080ba501d7056a68b)#### ② SafariでWebページを開く > ヘッダーの「デスクトップ用Webサイトを表示」をTapする
[![Im
【Core ML】YOLO v3をCoreMLに変換する方法
YOLO v3をCoreMLに変換してみたので手順を書きます。
YOLO v3は、物体を検出するアルゴリズムです。
YOLOをiOSで動作させるのに一番簡単な方法は、[Apple公式のCore MLモデル](https://developer.apple.com/jp/machine-learning/models/)をダウンロードして使用することですが、今回は手動で変換してみました。[オリジナルのYOLOv3](https://pjreddie.com/darknet/yolo/)はDarknet構築されていますが、今回はこちらにあるKerasに変換したものを使用します。
qqwweee/keras-yolo3
https://github.com/qqwweee/keras-yolo3### 手順
Google Colaboratoryでの手順を示します。
**1.必要なライブラリをインストール & インポートする**
“`Python:Notebook
!pip install tensorflow-gpu==1.14.0
!pip install -U co
実機テストってどうやるの?
#やりたいこと
実機デバイス(iPad)の表示確認をしたい.#条件
– プロキシの設定が必要#手順
「設定」 -> 「Wi-Fi」 -> 対象のネットワークのℹ️ボタンを選択して詳細設定画面へ
![D282083E-0B1D-4E3D-BBB8-8A45BAB953B1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377231/bfb90eaf-3fae-15f3-1889-17455b5f15e4.png)「プロキシ」 -> 「手動」 -> サーバとポート番号を設定
![62C24F1A-5437-4EAD-A777-06F27199900A (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377231/dcc82a9b-2a08-f11d-6f02-5eacb5ba9942.png)「一般」 -> 「プロファイル」
![AB687199-12DA-44CB-B66D-BE31153
[Swift]配列の要素数を取得する方法(超基礎)
“`ViewController.swift
//配列を定義
let fruitArray = [“パイナップ”, “キウイ”, “マンゴー”]//ここで配列の要素数を取得
let length = fruitArray.count//取得結果を表示
print(length) //結果(3)
“`
これで要素数の取得ができます。
要素数の取得ができるとその数で条件分岐などもできるので便利ですね。“`ViewController.swift
//配列を定義
let fruitArray = [“パイナップ”, “キウイ”, “マンゴー”]//ここで配列の要素数を取得
let length = fruitArray.count//条件分岐例
if length == 1 {
//1の場合の処理を記述
} else if length == 2 {
//2の場合の処理を記述
} else if length == 3 {
//3の場合処理を記述
}
“`