【Swift5】数値を3桁毎にカンマ区切りにした文字列にする

検証環境: Xcode 11.3 Swift 5.1.3 数値や金額の表記で3桁毎にカンマ区切りにした文字列に変換する方法についてです。 String.localizedStringWithFormatメソッドを使う、またはNumberFormatterを使うと言った方法があります。 let million: Int = 1_000_00…

はてなブログのMarkdownエディタで画像のサイズを変更する

ブログに挿入した画像のサイズを小さくする方法について。 div style で囲んで width を指定する。 <div style="width: 200px;"> [f:id:xyk:20200203150754p:plain] </div>

【Swift5】UITextViewの任意の文字列をタップ可能なリンクにする

検証環境: Xcode 11.3 Swift 5.1.3 UITextView の任意の文字列のタップ可能なリンクにする方法についてです。 リンク化する文字列のみ、色を変えてアンダーラインを追加します。 UITextView のサブクラスして実装し、IBDesignable と IBInspectable を使って…

CGRect 構造体で使える便利なメソッド

offsetBy origin の移動 // 右下に移動 let newRect = rect.offsetBy(dx: 10, dy: 10) insetBy center は変えずに size の変更 let rect = CGRect(x: 20, y: 20, width: 100, height: 100) // 縮小する -> (x: 40, y: 40, width: 60, height: 60) let smalle…

UIStackView に背景色を設定する

検証環境: Xcode 11.3 Swift 5.1.3 UIStackView の backgroundColor プロパティに色を設定しても描画されません。 そこで UIStackView の layer に CAShapeLayer を追加してそこに色を設定します。 UIStackView のサブクラスとして実装します。 IBInspectabl…

UIColor の2色間の中間色を表示する

検証環境: Xcode 11.3 Swift 5.1.3 2色間の中間色を補完する leap メソッドを UIColor の Extension として追加。 progress で割合を調整します。 import UIKit extension UIColor { func lerp(to: UIColor, progress: CGFloat) -> UIColor { return .lerp(f…

UIRefreshControl のプルダウンの距離を短くする

検証環境: Xcode 11.3 Swift 5.1.3 標準 の UIRefreshControl ですがアクションを開始させるためのプルダウンの距離が長いので短くする方法について調べました。 いくつかやり方はあるようですが今回は非推奨なやり方になりますが UIRefreshControl のプライ…

UITextView にプレースホルダーを設定できるようにする

検証環境: Xcode 11.3 Swift 5.1.3 たまに必要になるのでメモ。 import UIKit @IBDesignable open class PlaceHolderTextView: UITextView, UITextViewDelegate { @IBInspectable open var placeHolderText: String = "" { didSet { placeHolderLabel.text =…

Swift で端末の低電力モード、Appのバックグラウンド更新の状態を取得する

検証環境: Xcode 11.3 Swift 5.1.3 「低電力モード」になっているかを取得 if ProcessInfo.processInfo.isLowPowerModeEnabled { // Low Power Mode is enabled. Start reducing activity to conserve energy. } else { // Low Power Mode is not enabled. }…

UITableViewCell のタップした位置の IndexPath を取得する

検証環境: Xcode 11.3 Swift 5.1.3 UITableViewCell 上に置いたボタンをタップしたときにそのセルをアニメーション削除したい。 UITableViewDataSource プロトコルの cellForRowAt メソッドにセルのコールバックプロパティに引数の indexPath を渡す実装にし…

プログラムから iPhone 画面の明るさを取得、変更する

検証環境: Xcode 11.2.1 Swift 5.1.2 iPhone 画面の明るさは UIScreen.main.brightness プロパティから取得できます。 また、UIScreen.main.brightness プロパティに 0.0 から 1.0 の値を設定することで明るさをプログラムから変更できます。 1.0 が最も明る…

iOS13 で UITableViewCell をタップしても背景色がハイライトしなくなった

検証環境: Xcode 11.1 Swift 5.1 iOS13 で UITableViewCell をタップしてもハイライトしなくなったケースがあった。 原因はこちらの UIKit の仕様変更だった。 https://developer.apple.com/documentation/ios_ipados_release_notes/ios_13_release_notes Th…

Swift で Dictionary をマージする

検証環境: Xcode 11.1 Swift 5.1 Dictionary の mergeまたはmergingメソッドを使う。 // merging do { let a = ["a": 100] let b = ["a": 200, "b": 300] // 重複したKeyは a を優先させる場合 let result1 = a.merging(b) { (a, b) in a } print(result1) /…

Swift で 画像ビューワを実装する その4 - ネットワーク経由で取得する

検証環境: Xcode 11.1 Swift 5.1 前回の続き。 後ほど。

Swift で 画像ビューワを実装する その3 - 複数画像を並べて表示

検証環境: Xcode 11.1 Swift 5.1 前回の続き。 後ほど。

Swift で 画像ビューワを実装する その2 - ダブルタップで拡大縮小

検証環境: Xcode 11.1 Swift 5.1 前回の続き。 今回は画像をダブルタップしたときに拡大・縮小するように実装を追加する。 ScrollView のタップ箇所をズームさせる方法は Apple のプログラミングガイドを参考に実装する。 developer.apple.com まず、画像が…

Swift で 画像ビューワを実装する その1

検証環境: Xcode 11.1 Swift 5.1 画像1枚を表示するシンプルな画像ビューワを実装してみる。 画像はピンチで拡大縮小ができるようにする。 実装方法としては UIScrollView 上に UIImageView を配置して実現する。 ただ乗せるだけだと画像の起点が左上になる…

UINavigationController を使って深い階層の ViewController に一気に遷移する方法

検証環境: Xcode 11.1 Swift 5.1 例えば Universal Links などの機能を使ってディープリンクで深い階層に一気に遷移させたい場合などに使える。 UINavigationController の setViewControllers(_:animated:) というメソッドがあるので、この引数に複数の Vie…

Swift で for-in ループ時にキャストする

環境: Swift5.1 例えば、あるビューに追加されている複数のサブビューの中から UIButton にキャストできるものだけ処理する場合 for case button as UIButton in view.subviews { // ボタンに対する処理。ボタン以外はスキップされる。 // 例えばボタンの押…

Finder のコンテキストメニューに「Visual Studio Code で開く」を追加する

環境: macOS Mojave 10.14.6 Finder の右クリックで表示されるコンテキストメニューからVisual Studio Codeでファイルをすぐに開きたい。 Automator を使用することで Finder のコンテキストメニューに新たなメニューが追加できる。 Automator を起動し、フ…

AdMob の app-ads.txt を設定する

iOS アプリの場合の話。 現在の設定状態は AdMob 管理画面のアプリ->すべてのアプリを表示->APP-ADS.TXT タブから確認できる。 以下は設定方法についての記述部分。 これを読んで最初わからなかったのが、「デベロッパー ウェブサイト」の設定はどこにするん…

UITableView に行追加すると contentOffset がズレる時の対応

環境: Xcode10.3、Swift 5.0.1 UITableView で行の一番下までスクロールして、データの追加読み込み行い、行追加後の reloadData 時にカクっと画面位置がズレる場合がある。 セルの高さはすべて固定値の場合の話。 UITableView の rowHeight と estimatedRow…

iPhone のマイクから拾った音の音程を判定する

環境: Xcode10.3、Swift 5.0.1 iPhone のマイクから拾ったオーディオ情報から音程を判定する方法について調べた。 ちゃんとやるには、離散フーリエ変換 (discrete Fourier transform) を使って周波数を算出するらしいのだけれども、今回はAudioKitというOSS…

HUGO で静的なWebページを作成し Firebase Hosting にデプロイする

gohugo.io こちらの公式ドキュメントの Quick Start に従ってやってみる。 HUGO インストール $ brew install hugo インストール確認 $ hugo version Hugo Static Site Generator v0.58.1/extended darwin/amd64 BuildDate: unknown WEBサイトを生成 新しいW…

Firebase Cloud Messaging による通知をバックグラウンドでも受け取る

Swift version 5.0.1 iOS11 Firebase Cloud Messaging でアプリがバックグラウンドでも通知を受け取る方法について。 APNs ペイロードに content-available: 1を含める必要あり。 これが含まれることでアプリがバックグラウンドであっても application(_:did…

App Store Connect にアップロードするスクリーンショットのサイズについて

ios

App Store Connect にアップロードするスクリーンショットの仕様について。 2019年8月現在、iPhone 向けアプリには 6.5インチ - 1242 x 2688ピクセル iPhone XS Max 5.5インチ - 1242 x 2208ピクセル iPhone 8 Plus iPhone 7 Plus iPhone 6s Plus の2サイズ…

CGAffineTransform を使い View を180度回転、元に戻す

環境: Swift 5.0.1 ある View (ここではUIImageView)を180度回転させる、そして元の状態に戻すアニメーションをさせたい。 こういう場合、 CGAffineTransform の rotation を使えば実現できる。 こんなかんじの動きにしたかったのだが少しハマってしまった。…

UILabelのattributedTextのテキストを他の属性は変更せずに別の文字列に置き換える

環境: Swift5.0 UILabelのattributedTextのテキストを他の属性は変更せずに別の文字列に置き換える例。 @IBOutlet weak var textLabel: UILabel! private func setupUI() { if let attrStr = textLabel.attributedText?.mutableCopy() as? NSMutableAttribut…

MacのDockアイコンがおかしいときにやったこと

mac

MacのDock上に表示されるアプリのアイコンがデフォルトと言うか generic なアイコンになってしまった。 元に戻すためにやった手順をメモ。 先に結論を書いておくとアイコンのキャッシュを削除することで元に戻った。 まずSIP(System Integrity Protection)を…

UISegmentedControl を未選択状態にする

selectedSegmentIndex に UISegmentedControlNoSegment (-1) を設定する。 この定数を忘れるのでメモ。 segmentedControl.selectedSegmentIndex = UISegmentedControlNoSegment Swift4 から segmentedControl.selectedSegmentIndex = UISegmentedControl.noS…