iOS関連のことを調べてみた2020年06月17日

iOS関連のことを調べてみた2020年06月17日

IBActionの引数にあるsenderの使いみち(Swift)

## はじめに

`sender` については以下の記事にいろいろ書いているので、読んでから本記事を読んでいただけるとわかりやすいと思います。
https://qiita.com/uhooi/items/e90d06e5d5681d72cbd0

そもそも `IBAction` の `sender` を使う機会はあまりないと思います。
少なくとも私はほとんど使わず、使いみちがパッとは出てきませんでした。

Twitterで教えていただいたので紹介します。

## `sender` の使いみち

さっそく `IBAction` の引数である `sender` の使いみちを紹介します。

### 1つの `IBAction` に複数のUIを紐付けて区別する

元記事を表示

【超初学者向け】画面遷移と値の引き渡しをコードで同時に行う。

##はじめに
本記事は、筆者が備忘録として作成したものである。
また同時に超初学者向けの簡単な内容となっております。

##実装したいこと
今回は、Swift学習の超基本である、下記2点について記述する。
①任意のタイミングでの画面遷移
②値の引き渡し(画面遷移と同時に処理)

今回は、ViewContorollerのラベルデータを→NextViewController(遷移先)のラベルへ反映させたいと思います。

##必要なコード
必要なコードは下記のみ

①「任意のタイミングでの画面遷移」

“`php:ViewController
//ボタンがタップされた時に画面を遷移する場合。
@IBAction func tapButton(_ sender: Any) {

performSegue(withIdentifier: “遷移先と繋がるSegueのidentifier”, sender: nil)

}
“`

②「任意のタイミングでの画面遷移」

“`php:ViewController
override func prepare(for segue: UIStory

元記事を表示

こんなソースコードはイヤだ-ダイアログとデリゲートパターンの相性

プログラムのソースコードのより良い書き方をまとめていこうと思います。

# ダイアログとデリゲートパターンの相性

“`sample.swift
protocol OkDialogDelegate {
func okDialogEvent()
}

class OkDialog {
private let message: String
private var delegate: OkDialogDelegate?

init(message: String, delegate: OkDialogDelegate?) {
self.message = message
self.delegate = delegate
}

//OKボタン押下時
func onOkClicked() {
self.delegate?.okDialogEvent()
}
}
“`

[どのようにリファクタリングできるのか](https://www.sentohsharyoga.com/j

元記事を表示

Xcode11.4でMKMapViewを使うとクラッシュするかもしれない

# はじめに
Xcode 11.4 で MKMapView を使うとよくわからないクラッシュをした。。。

# 環境
* Xcode 11.4 (11.3 と 11.5 も同様でした)

実機

* iOS 13.1.3
* iOS 13.4.1

# ソース
Storyboard で `MKMapView` をのっけただけで `ViewController` には何も追記しない。

storyboard

“`swift
import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup

元記事を表示

TableViewCell選択時にCellの背景色と文字色を任意の色に変える

## 開発環境
“`
Xcode: Version 11.1 (11A1027)
“`

## スクリーンショット
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559964/a41e416c-c61c-26d2-93f1-acb4cd9456ae.png)

1. 初期状態
2. “3”のセルをタップ
3. “4”のセルをタップ

## コード
※Storyboard上の要素のプロパティは全てデフォルト値

“`swift:ViewController.swift
import UIKit

class ViewController: UIViewController {

@IBOutlet weak var tableView: UITableView!

let numbers = [
“0”, “1”, “2”, “3”, “4”
]

override func viewDidLoad() {

元記事を表示

【Swift】基礎③ (初心者向け)

## はじめに
Swift実践入門をベースにポイントをまとめています。
間違えている箇所があればご指摘いただけると嬉しいです。

## プロトコル
– **型が特定の性質や機能を持つために必要なインタフェースを定義するためのもの**
– プロトコルが要求するインタフェースを型が満たすことを`準拠`と言う

“`Swift:Swift
// スーパークラスを1番目に指定してプロトコルは2番目以降に指定する
class クラス名 : スーパークラス名, プロトコル名1, プロトコル名2… {
// クラスの定義
}
“`

– **`1つのプロトコル`に対して`1つのエクステンション`を定義することで、プロパティ、メソッドとプロトコルの対応が明確になる**
– **プロトコルは構造体、クラス、列挙型、クロージャと同様に、変数、定数や引数の`型`として使用できる**
– プロトコルに準拠している型はプロトコルに`アップキャスト可能`

“`Swift:Swift
protocol SomeProtocol {
var variable: Int { get }

元記事を表示

AdMobをiOSに組み込んでみよう(Video広告編)

AdMobをiosに組み込んでみようという事で覚書

「AdMobをiOSに組み込んでみよう(環境設定編)」の続きです。
https://qiita.com/sanoh/items/2c99918fe7c9ba01821c

■Setp1.画面のレイアウトを設定しよう

・ストーリーボードを立ち上ボタンを作成しよう(Layoutの仕方は省きます)
![image0303.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122121/6956f5d9-1aba-37c9-f58b-1714ab45f9f3.png)
■Step2.ボタンをソースに追加

Buttonを右クリックで「ViewController.m」の@endの上にドロップします。
![image0304.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122121/08d4394c-0c2f-4f70-1e30-80de7e505127.png)

元記事を表示

AdMobをiOSに組み込んでみよう(全画面広告編)

AdMobをiosに組み込んでみようという事で覚書

「AdMobをiOSに組み込んでみよう(環境設定編)」の続きです。
https://qiita.com/sanoh/items/2c99918fe7c9ba01821c

■Setp1.画面のレイアウトを設定しよう

・ストーリーボードを立ち上ボタンを作成しよう(Layoutの仕方は省きます)
![image0203.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122121/37f979cc-19b9-6568-d22a-0bc5ceef8cd9.png)
■Step2.ボタンをソースに追加

Buttonを右クリックで「ViewController.m」の@endの上にドロップします。
![image0204.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122121/cf0b10f8-f5c6-6905-3df8-fe024f171d73.png)

元記事を表示

AdMobをiOSに組み込んでみよう(バナー広告編)

AdMobをiosに組み込んでみようという事で覚書

「AdMobをiOSに組み込んでみよう(環境設定編)」の続きです。
https://qiita.com/sanoh/items/2c99918fe7c9ba01821c

■Setp1.画面のレイアウトを設定しよう

・ストーリーボードを立ち上げよう
「Main.storybord」を選択します。
![Image0101.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122121/4f845b63-75ba-d987-7a40-8d76beb6d6d5.png)
・バナーを表示するViewを登録
「View」の「ShowLibrary」を選択するとライブラリWindが現れますので、その中にある「View」をドラッグ&ドロップします。
![image0103.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122121/bfda6785-3465-7be4-4b84

元記事を表示

AdMobをiOSに組み込んでみよう(環境設定編)

AdMobをiosに組み込んでみようという事で覚書
元にした内容
https://developers.google.com/admob/ios/quick-start?hl=ja
■Step1:必要なToolのインストール

・CocoaPodsのインストール
まずは、必要なToolをインストールするために「CocoaPods」をインストールします。
https://guides.cocoapods.org/using/getting-started
を参考にしてください。
■Step2:プロジェクト作成

・プロジェクトを作成
OSはiOSですね
Application:Single View App
を選択し「Next」を
![image0001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122121/088937b6-6bf1-f9a4-4328-934814dc04f6.png)
・プロジェクト名その他設定
今回はProduct Nameは「AdMob01」にしました
Lang

元記事を表示

RxSwiftを使用してFirestoreからドキュメントを取得(メモ)

RxSwiftについてのお勉強、Firestoreからデータ取得する処理を書いていたので、
組み合わせて書いてみた時のメモです。
もっとこうした方が良いや、この書き方は無いな等あればアドバイスいただければ幸いです。
#環境
– Xcode: 11.3.1
– Firebase: 6.16.0
– RxSwift: 5.1.0

##・ViewModel
“`Swift:FireStoreTmpViewModel.swift
// Firestoreからドキュメントを取得
func getFsData() -> Single {
return Single.create { (observer) -> Disposable in
Firestore.firestore().collection(“collectionName”).getDocuments(){ (querySnapshot, err) in
if let error = err {

元記事を表示

UIViewのtransform3Dは実はiOS12では使えない

**iOS12からtransform3Dが追加されました。**z軸回転アニメーションも出来る凄いやつです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24979/0f633790-f524-eb37-ddde-1eb858d819bd.png)

https://developer.apple.com/documentation/uikit/uiview/3043565-transform3d

さて、こんなtransform3Dですが**iOS12では使えません。**

え??

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24979/8eeb82bc-da3b-598b-ea95-5a4c16f0e2f9.png)

いやいやいやいや

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com

元記事を表示

IBActionのsenderはAnyでなく具体的な型を指定しよう(Swift)

`UIButton` タップ時の処理などを `IBAction` で紐付けるとき、 型は `Any` がデフォルトなので、そのままにする人も多いのではないでしょうか。
スクリーンショット_2020-06-16_11_39_03.jpg

“`swift:×
final class FooViewController: UIViewController {
@IBAction private func didTapCloseButton(_ sender: Any) {
}
}
“`

それだとキャストしないと型に応じた処理を実行できないので、具体的な型を選択して紐付けるのが望ましいです。
スクリーンショット_2020-06-16_11_43_16.j</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>iOS</div>
<div class='tag-cloud-link'>Swift</div>
<div class='tag-cloud-link'>IBAction</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/uhooi/items/e90d06e5d5681d72cbd0'>元記事を表示</a></div>
<h3 id=Apple iPhone と Google Pixel の解像度 (dp) メモ

# iPhone (iOS)

320px 端末そろそろ切られそうっすね (元祖 SE は 2016 年発売だし)

Apple iPhone

# Pixel (Android)

アップデートで数十 dp づつ伸びる Pixel くん

Google Pixel

# 解像度

| 端末 | 解像度 |
|:–|:–:|
| iPhone 11 Pro Max/XS Max/11/XR | 414×896 |
| iPhone 11 Pro/X

元記事を表示

simctl コマンドで iOS シミュレータの初期セットアップを実行する

# はじめに

仕事やプライベートの開発で iOS シミュレータを利用することが多いのですが、Xcode をアップデートするたびにシミュレータが初期化されてしまうのが地味にストレスでした。少し調べてみたところ `simctl` を利用することでサクっとシミュレータの初期セットアップが実行できることがわかったので書き留めておきたいと思います。

# 環境

Xcode 11.5

# できたスクリプト

シミュレータを起動した状態で下記スクリプトを実行すると、

– Charles Proxy の CA 証明書のインストール
– 使用言語/地域の変更(日本語/日本)

が完了します。

“`bash:setup-simulator.sh
#!/usr/bin/env bash

set -eu

device=${1:-boote

元記事を表示

[iOS, GPU] Metalの描画パイプラインを図解してみる

Apple製のGPUシェーダー言語Metalにて、初学者には中々掴みにくい描画の仕組みについて図示しながら概説してみたいと思います.

# はじめに
ざっくりと、Metalでは以下のような手順で描画が行われます。

– 描画情報の設定 (頂点や色の設定など)
– 描画コマンドの生成と送信
– Shader (.Metal拡張子に書かれた描画関数) の通り描画を実行.

about_metal.png

以下、これらそれぞれの概説を図とともに見ていきたいと思います.

# 描画情報の設定

まずは図に記載の
– MTLRenderPipelineDescriptor
– MTLRenderPassDescriptor
の2つのオブジェクトに描画情報をセットし、これを描画コマンドへと渡すようにします.

元記事を表示

Unity iOSのクラッシュレポートについて調べてみた(活用方法や注意点など)

Unityには現状iOSプラットフォームのみ利用可能な「[UnityEngine.CrashReport](https://docs.unity3d.com/ScriptReference/CrashReport.html)」と言うAPIが備わってます。

こちらの機能は、恐らくはiOS標準で備わっている?[クラッシュレポート機能](https://developer.apple.com/documentation/xcode/diagnosing_issues_using_crash_reports_and_device_logs)を利用して実装されているものと思われ[^1]、それを踏まえつつ実際に有効活用する上で必要となってくるであろうレポートの読み方や注意点について調べみたのでメモ序に纏めて行ければと思います。

[^1]: Unity側の内部実装まで追いきれていないので、あくまでも推測の域を出ない

もし間違いなどあればコメントにて教えて頂けると幸いです! :bow:
(間違いなどあったら随時修正予定…)

**記事中で利用するUnity/Xcodeのバージョンについて

元記事を表示

[Swift]UIImage型とData型の相互変換

# はじめに
Swift4からUIImage型とData型の変換をシンプルに書けるようになったので紹介します。
特にUIImage型→Data型への変換はしばしばextensionを作っていましたが、それらと同じことが公式にできるようになりました。

# UIImage型→Data型
`image`をData型に変換したいUIImage型のインスタンスとします

“`swift
// pngに変換する
image.pngData()

// jpegに変換する
// compressionQualityには0~1の範囲で圧縮率を指定する
image.jpegData(compressionQuality: 1)
“`

# Data型→UIImage型
`data`をData型に変換したいUIImage型のインスタンスとします

“`swift
// UIImage?型になるので、必要に応じてアンラップをする必要がある
UIImage(data: data)

// 強制アンラップしてUIImage型にする
UIImage(data: data)!
“`

# 参考リンク
ht

元記事を表示

Google AdMobからヤバそうな内容のメールが届いたから対応した件

# はじめに

私は個人のiOSアプリに [Google AdMob](https://admob.google.com/intl/ja/home/) でアプリ内広告を導入することで広告収益を得ているのですが、3週間ぐらい前に突然、以下の画像の内容のメールが送られてきました。

– **app-ads.txt ファイルのないアプリは、広告掲載の対象外になっていく可能性があります**
– **一部の代理店や購入者はすでに app-ads.txt ファイルのないアプリへの広告掲載を停止しており、今後この動きは他の広告主にも広がることが予想されます。**

いやいやいやいや!それは困

元記事を表示

iOSのカメラから深度を取得して保存すること関連メモ

深度データが視差になってる場合?
PhotoshopのHEICファイル深度データとは異なるAVDepthDataからの深度マップ
https://ja.stackoverflow.com/questions/23972/coreimage%E3%81%A7%E3%82%A8%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88%E3%81%97%E3%81%9F%E7%94%BB%E5%83%8F%E3%81%8Cuiactivityviewcontroller%E3%81%A7%E7%94%BB%E5%83%8F%E4%BF%9D%E5%AD%98%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84

UIImageをカメラロールに保存する
[iPhone] AVCaptureVideoDataOutput ビデオで静止画撮影する

[iPhone] AVCaptureVideoDataOutput ビデオで静止画撮影する

深度データが保存できなかった
CoreImageでエフェクトした画像がUIActivityViewCon

元記事を表示

OTHERカテゴリの最新記事