xyk blog

最近は iOS 開発の記事が多めです。

2020-01-01から1年間の記事一覧

Swift - UIBezierPath で吹き出しのパスを描く

検証環境: Xcode 11.6 Swift 5.2.4 こんな吹き出しを UIBezierPath を使って描画してみます。 パスの描画順は以下図の流れになっています。 吹き出し部分は addQuadCurve メソッドを使い、曲線上の終点とコントロールポイント1つを指定します。 この時の終…

Swift でフォトライブラリに UIImage を保存する

検証環境: Xcode 11.4 Swift 5.2 Photos.framework を使って フォトライブラリに UIImage 画像を jpeg または png で保存する方法です。 まず Info.plist に使用目的を追加します。 <key>NSPhotoLibraryUsageDescription</key> <string>フォトライブラリの写真を利用します。</string> <key>NS</key>…

IBDesignable を使ったカスタムビュー使用時に発生するエラー原因を調べる

検証環境: Xcode 11.3.1 Swift 5.1.3 Storyboard上で IBDesignable を使ったカスタムビューを貼り付けたところ、 error: IB Designables: Failed to render and update auto layout status for UIViewController (nyp-0u-XJD): The agent crashed というエラ…

IBDesignable を使ったカスタムビューのプレビュー時に呼ばれるメソッドについて

検証環境: Xcode 11.3.1 Swift 5.1.3 IBDesignable や IBInspectable を使うことで Storyboard や Xib 上でカスタムの属性の設定ができ、変更がリアルタイムに反映されてプレビューできるようになります。 ところで、IBOutlet で接続したビューに対して初期…

Xcode の Swift Package Manager で Repository を追加しようとしたらエラーになる

検証環境: Xcode 11.3.1 Swift 5.1.3 Swift Package Manager でリポジトリを追加しようとしたところ以下のようなエラーが出た。 Couldn’t communicate with a helper application. Try your operation again. If that fails, quit and relaunch the applicat…

【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 の任意の文字列のタップ可能なリンクにする方法についてです。 まず NSAttributedString.link 属性を使用してリンク化する text と range を設定します。 そして UITextViewDelegate の textView(_:shouldInter…

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 プロパティに色を設定しても描画されません。 (※追記: iOS 14 から UIStackView の backgroundColor で背景色を付けられるようになりました。) そこで UIStackView の layer に CAShapeLay…

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 UITextView にプレースホルダーを設定できるカスタムビューを作成した。 import UIKit @IBDesignable open class PlaceHolderTextView: UITextView { @IBInspectable open var placeHolderText: String = "" { didSet { pl…

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. }…