iOS関連のことを調べてみた2021年09月03日

iOS関連のことを調べてみた2021年09月03日

【Flutter】全画面を削除し遷移する

## 何度か画面遷移をした後にトップレベルの画面に戻す

“`dart
Navigator.of(context).pushNamedAndRemoveUntil(‘/page’, (_) => false,);
“`

### メソッド

条件を満たすまで画面を破棄し遷移するため, 条件部分でfalseを返している.

“`dart
pushNamedAndRemoveUntil(
”, //page
(_) => false, //条件
)
“`

参考 https://api.flutter.dev/flutter/widgets/Navigator/pushNamedAndRemoveUntil.html

元記事を表示

Swift – fullScreenで画面遷移三つの方法

#背景
デフォルトで画面が遷移する時、新画面は旧画面に重ねて出てきます、↓のように。
でも、時々フルで画面を出したい時もあるでしょう。以下フルで画面を出す方法を紹介します。
![截圖 2021-09-02 21.37.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1326861/ba5df0cf-9d54-28da-2e5e-fb5a8e6d6082.png)
#その一:present
以下のコードを入れて、画面一のUIボタンをクリックすれば、フルで画面を出せます。

“`simple.swift
//画面一に入れたボタンのクリックイベント
@IBAction func button(_ sender: UIButton) {
let vc = UIStoryboard(name: “Main”, bundle: nil).instantiateViewController(withIdentifier: “ViewController2”) as! ViewCo

元記事を表示

[Swift] 文字入力バリデーションを実装する(iOS)

## はじめに

TextField等の入力フォームで受け取った文字列をそのままサーバー側に投げるのは、サーバへの負担となってしまうのでなるべく避けたいところです。
そこで明らかに無効な入力があった場合、アプリ側で弾くことができるよう簡易的なバリデーション機能を設けることにしました。

## チェック対象

– Password

記事を分かりやすくするため、パスワードのバリデーションのみを考えることにします。

### 必要な要件

– 英数字のみ
– 大文字小文字の制限は設けない
– 文字数は6~8

よくある簡易的なパスワードという感じです。

## 実装

上記のようなフォームに入力した場合を想定してつくります。

### コード

“`swift
import Foundation

// ①
enum ValidationResult {
case valid
case dataIsEmpty(

元記事を表示

FirebaseUIが新しくなってimport FirebaseUIが指定できなくなった

6/9にリリースされたバージョン11.0でFirebaseUIが新しくなりSwiftで

“`
import FirebaseUI
“`
が指定できなくなった。

teratailの回答の通りにimport FirebaseAuthUIを書いてみても、「Cannnot find XXX in scope」は無くならず。

https://teratail.com/questions/349444

# 解決策

“`swift
import FirebaseAuthUI
import FirebaseEmailAuthUI
import FirebaseFacebookAuthUI
import FirebaseAnonymousAuthUI
import FirebasePhoneAuthUI
import FirebaseOAuthUI
import FirebaseGoogleAuthUI
“`

を書いたところエラーが解決されました。

ちなみにFUIGoogleAuthとFUIFacebookAuthは( )内に authUI 引数を指定しないとビルド後にエ

元記事を表示

[Swift] 同じ値を毎回代入するのと同じ値じゃない時だけ代入するのってどっちが早いのか今更だけど検証した

## モチベーション

varで宣言された値があるとします。

“`swift
var foo = false
“`

それを上書きするとします。

“`swift
foo = true
“`

ということを複数回繰り返すとします。

“`swift

(0…10000).forEach { _ in
foo = true
}
“`

この時に毎回trueを代入しても、fooがfalseの時だけ代入しても結果fooはtrueになります。

“`swift

(0…10000).forEach { _ in
foo = true
}

(0…10000).forEach { _ in

if foo { return }

foo = true
}

// どっちにしろfooはtrueになる。

“`

今更なんですが、パフォーマンス的にはどっちがいいのか気になったので検証してみました。
(もう誰か試してる気がするけど簡単にできそうだったので今のバージョンで改めてということでお許しください。。。)

仮説としては毎回代入する方が

元記事を表示

FlutterでFirebaseのパッケージを導入する(主にIOS)

###概要
FlutterでFirebaseのパッケージを導入するための最低限の手順です。
少し厄介なIOSでの実装について書いていきます。

####1. pubspec.yamlにパッケージを入れる
使いたいパッケージを`pubspec.yaml`に入れて`Pub get`を実行する。
####2. CocoaPodsをインストールする
podのリポジトリを更新する前に`ios/Podfile`を開き、2行目にあるコードをコメントアウトから解除し、新しいバージョンに指定する。
![スクリーンショット 2021-09-02 15.11.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1132605/f40d59f8-7c5b-781c-eb7d-bfbd2f6b0fb2.png)

また、RunnerターゲットのIOSバージョンもXcodeから変更する。
![スクリーンショット 2021-09-02 16.01.07.png](https://qiita-image-store.s3.ap-nor

元記事を表示

Flutter: Android studioでFirebaseをセットアップする最低限の手順(Android&IOS)

###この記事について
この記事はFlutterでAndroidとIOSのアプリを作る際、Firebaseを使用するときのセットアップ方法についての記事です。
実装するたびに動画の教材を見ており時間が掛かってしまうため(特にIOS)、一連の作業を箇条書きにしております。
セットアップのための最低限やることを書いた記事のため、Firebaseの機能の実装等は記載していません。また、Firebaseプロジェクトの作成は省略しております。

###開発環境

“`
% flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel master, 2.6.0-1.0.pre.150, on macOS 11.5.2 20G95 darwin-x64, locale ja-JP)
[✓] Android toolchain – develop for Android devices (Android SDK version 31.0.0)
[✓] Xcode –

元記事を表示

Swiftのナビゲーションバーの枠線を消す

#箇所
頭部のところ
![截圖 2021-09-01 23.54.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1326861/e0797f84-9881-9c47-2b6d-e31aa45a3a2c.png)
#消したい画面に
“`sample.swift
override func viewDidLoad() {
super.viewDidLoad()
let image = UIImage()
self.navigationController?.navigationBar.setBackgroundImage(image, for: .default)
self.navigationController?.navigationBar.shadowImage = image
}
“`
を書き込んだら消えます。

元記事を表示

[SwiftUI]Colorの整理とダークモード対応(超簡単)

## 投稿の経緯
SwiftUI × 個人開発でアプリ内で使う配色を管理する場合に使った方法を投稿します。

## 環境
Swift version 5.4.2
Xcode version 12.5.1

## Colors.xcassetsの作成
`File > New > File…`で`Asset Catalog`を選択して今回は`Colors`という名前でファイルを新規作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/eafc58ff-dea3-3145-5b5d-94651a9fb60f.png)

ファイルを作成したら下記画像のように`New Color Set`で色を追加します。

![スクリーンショット 2021-09-01 16.47.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/23989720-4b4d-8989-b875-f35df0

元記事を表示

TabViewで選択時のタブを画像毎置き換える方法

## やったことなど
今回はタブボタンを選択した時の変化を「アイコン」に対してやってみようと思いました。
参考ページでは「SF Symbol」のフォントを変化させる方法が掲載されています。
とある案件で選択時のタブボタンを画像毎変える必要があったため、なんとか手を加えて試してみました。
構成やソースはほぼ参考サイトを引用しています。

## コード
引用したソースから「systemName:」を削除して少しImageの名前を変えた程度でなんとかうまくいきました。

“`swift
struct ContentView: View {

// タブの種類
enum Tab {
case circle
case square
}

// 選択中のタブ
@State private var selection: Tab = .circle

var body: some View {
TabView (selection: $selection) {

元記事を表示

[SwiftUI] ScrollView offsetでアニメーションボタン作ってみた

## 環境
Xcode 12.5
iOS14以上

## 概念
1. GeometryReader
https://developer.apple.com/documentation/swiftui/geometryreader
2. Overlay https://developer.apple.com/documentation/swiftui/view/overlay(_:alignment:)
2. RotationEffect https://developer.apple.com/documentation/swiftui/text/rotationeffect(_:anchor:)
2. Animation
https://developer.apple.com/documentation/swiftui/animation

## 画面作成
最初はボタンを作る前に中身を作る。
LazyVGridでUIKitのUICollectionViewように画面を作成した。
画面はこんな感じ。

capture01React Native(Expo)のiOSビルドでエラーになる件

# ExpoでiOSアプリをビルドするとエラー終了してしまう
実際に表示されていたエラーは以下。

“`:ビルドを実行したコンソールに出るエラー
You can press Ctrl+C to exit. It won’t cancel the build, you’ll be able to monitor it at the printed URL.
✖ Build failed.
Standalone build failed!
“`

“`:Expoのダッシュボードで見れるビルドログのエラー
Error: xcrun exited with non-zero code: 1
at ChildProcess.completionListener (/usr/local/turtle-js/node_modules/@expo/xdl/node_modules/@expo/spawn-async/build/spawnAsync.js:52:23)
at Object.onceWrapper (events.js:418:26)
at ChildPro

元記事を表示

NeumorphismなTabBarを実装する

##外部ライブラリを使用する
使用したライブラリ: [NeumorphismTab](https://github.com/touyou/NeumorphismTab)

CocoaPodsでインストール

“`ruby
pod ‘NeumorphismTab’
“`

##コード
ライブラリをimport

“`swift
import NeumorphismTab
“`

`NeumorphismTabBarController`を継承した`MainTabBarController`クラスを作る

“`swift
class MainTabBarController: NeumorphismTabBarController
“`

`override func setupView()`メソッドに下記を記述
###colorを設定

“`swift
view.backgroundColor = #colorLiteral(red: 0.9725490196, green: 0.9725490196, blue: 0.9725490196, alpha: 1)
“`

元記事を表示

UIStackViewを使ってViewを比で分割したい

## やりたいこと
![memo_1630333626.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477548/fd31da3a-9345-bb83-dc61-5d9443be2b4c.jpeg)
↑のようなイメージでViewを比で分割したい

## 環境
Xcode 12.5.1
Swift 5.4.2

## UIStackViewの準備
“`swift
import UIKit

class ViewController: UIViewController {

let topView: UIView = {
let view = UIView()
view.backgroundColor = .red
return view
}()

let middleView: UIView = {
let view = UIView()
view.backgroundColor

元記事を表示

[iOS] [Swift] WKWebViewでtarget=“_blank”に対応する

## デリゲートを埋め込む

**WKUIDelegate** を埋め込む

“`swift
class MyViewController: WKNavigationDelegate, WKUIDelegate {
}
“`

**_webview.uiDelegate** をセットする

“`swift
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.webView.uiDelegate = self
self.webView.navigationDelegate = self
}
“`

## webView:createWebViewWithConfiguration:メソッドを実装

対象URL(target=“_blank”)をSafariで開く

“`swift
func webView(_ webView: WKWebView, createWebViewWith con

元記事を表示

環境センサーのデータをスマホでモニタリングする(Flutter) – データ蓄積編 –

## 概要
* 新型コロナの影響で環境センシングデバイス、可視化ツールの需要が高まっている。
* 前回「IoT-DX-Kit」を使って、スマホのFlutterアプリ上で気温、湿度を可視化してみた。
* 今回はクラウド(AWS)上にデータ蓄積を行う。
* EC2インスタンスやRDB、S3を使わない方法を試してみた。

AWSのCloudWatchにデータが温湿度データが蓄積されている様子
![スクリーンショット 2021-08-31 9.08.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/701445/a820c19d-532d-8e0d-9b3d-1814ba52f704.png)

## 用意するもの
* IoT-DX-Kit マイコンボード
* DHT22 温湿度センサー
* AWSアカウント

## 環境構築
(1)Flutterをインストール
 https://www.arduino.cc/en/main/software
(2)Flutter Blueをインストール
 https:/

元記事を表示

iPhone のGPUで物体の重心をリアルタイムに計算

A14 Bionic GPU での配列の合計計算が高速であることを活かして、二値化された画像の重心をリアルタイムに計算する方法を紹介します。

<完成イメージ>
※赤丸が重心。二値画像の黒い部分が円(10円玉)の場合、円の中心が重心になっていることがわかります。
![demo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71605/11f1a9d4-726d-f754-5a05-065cf73f6b17.gif) ![demo2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71605/0cd97c8a-353d-80dc-f7d8-6e3bb72fc0af.gif)

本記事のサンプルコードはGithubに置いています。

https://github.com/tamai999/ImageMoment

iOS14以降であれば実行できますが(二値化・クロージングの動作確認はできますが)、GPUでの重心計算確認にはiP

元記事を表示

【iOS】Metal Best Practicesの解説(8) フレームレート

[Metal Best Practices](https://developer.apple.com/library/archive/documentation/3DDrawing/Conceptual/MTLBestPracticesGuide/index.html#//apple_ref/doc/uid/TP40016642-CH27-SW1)は、iOS/MacOS/tvOSのAPIであるMetalを用いた設計のベストプラクティスガイドです。

本稿では、何回かに分けてこのガイドを読み解き、コード上での実験を交えて解説していきます。
読んでそのまま理解できそうなところは飛ばしますので、原文を読みながら原文のガイドとしてご利用下さい。
また、iOSの記事なので他のOS(MacOS, tvOS)についての記載は割愛します。

他の記事の一覧は、初回記事よりご覧下さい。

https://qiita.com/TokyoYoshida/items/521619d6d8dd8d8ef9e4

### [Frame Rate (iOS and tvOS)(フレームレート)](https://d

元記事を表示

【SwiftUI】TextEditorにプレースホルダーを表示する

# はじめに
SwiftUIのTextEditorは標準でプレースホルダーを表示することができません。
ここではZStackを用いてTextEditorにプレースホルダーを表示する方法を紹介します。

# 実装

“` Swift
import SwiftUI

struct ContentView: View {
@State var text = “”

var body: some View {
Form {
ZStack {
if self.text.isEmpty {
HStack {
Text(“プレースホルダー”).opacity(0.25)
Spacer()
}
}
TextEditor(text: self.$text)

元記事を表示

どうしても UITabBarController で6タブ表示したい

:::note warn
完全に動作保証された方法ではありません
:::

敵「この画面の露出を上げたいので、タブ増やしてそこに配置できないですかね?」
ぼく「あー今全部で5タブ使ってしまっているので、これ以上は難しいですね」
ぼく「HIG(Human Interface Guidelines)上はタブは最大5個までなので」
ぼく( `UITabbarController` でのタブ実装自体を変更するのは勘弁だなあ)
ぼく「最悪、審査でのリジェクトリスクもありますよ!」
敵「でも、(某有名アプリ)は6タブでストア公開してますよね?」
ぼく「 ? 」

というわけで、 `UITabBarController` でどうにか6タブ表示する方法を調べました。

## 前提情報

iOS アプリでタブ表示を実現するとなると、 `UITabBarController` が最初の選択に入ってくるかと思います。

`UITabBarController` は非常によくできており、HIG通りiPhone端末での6タブ以上の表示を防止するために、6タブ以上を設定すると省略表記とする動きが存在します。

h

元記事を表示

OTHERカテゴリの最新記事