アプリ開発の逆引き辞典

アプリ開発のTipsをまとめました

Swift

SwiftUIで画像のみのタブバーアイテムを表示する

SwiftUIではTabViewを使ってタブバーを実装します。画像とラベルがセットになっているのか、画像のみのタブバーアイテムにした場合、ラベル分が空白になってしまいます。そのため、タブバーアイテムのアイコンを下方向にずらします。 extension UITabBarCont…

Swiftで Property List をPropertyListDecoderを使ってパースする

Property List (plist)ファイルで定義した配列をUITableViewで表示したいという質問に回答しました。 私もObjective-C を使っていた時代にplistで表示項目のON/OFFの切り替えを管理していた時期を思い出しました。あの頃は PropertyListDecoder がなくて、pl…

Firebase Analytics for iOSで setScreenName(_:screenClass:) がdeprecatedになった

Firebase Analytics for iOSを 6.6.2 から 6.7.0 へアップデートしたところ、setScreenName(_:screenClass:) でdeprecatedになったよと警告が出るようになりました。 開発中のアプリでは下記のようなメソッドで画面名をトラッキングしています。 import Fire…

Swiftで 数字がキーになっているJSONデータをデシリアライズする

下記のように店舗情報のキーが数字になっているJSONデータをデシリアライズできるか?と質問があり回答しました。 { "response": { "total_hit_count": 4, "0": { "shop_id": "6072772", "shop_name": "店舗A" }, "1": { "shop_id": "6072773", "shop_name":…

SwiftでisKindOfClassメソッドを使う

Objective-Cで特定のクラス(またはサブクラス)であるかどうか判定する場合には、[view isKindOfClass:[UIImageView class]]を使っていた。 swiftでは以下のように書くことができる。 view.isKindOfClass(UIImageView)

Swiftで乱数(ランダムな値)を生成する

特定の範囲の乱数を求める際には、Objective-Cと同じようにarc4random関数を使うことができます。 //0から9までの値を取得する let random = arc4random() % 10 上記のコードではarc4random関数で得た乱数の余剰を求めているため、arc4random関数では生成さ…

NSNumber型で現在の年度を取得する

過去にObjective-CでNSCalendarクラスとNSDateComponentsクラスを使って、以下のような現在の年度をNSNumber型で取得するメソッドがありました。このメソッドを - (NSNumber*)yearNumber { NSCalendar* gregorian = [[[NSCalendar alloc] initWithCalendarId…

文字列からUIImageオブジェクトを生成する

NSString型の文字列を画像に変換します。「サイズを指定して空のUIImageオブジェクトを生成する - iOSアプリ開発の逆引き辞典」をベースとしています。 - (UIImage *)imageWithString:(NSString *)text { // 描画するサイズ CGSize size = CGSizeMake(34, 18…

NSTimerでblocksを処理する

NSTimerのカテゴリを扱ったプロジェクトは沢山ありますが、その中でも「NSTimer-Blocks」が使いやすくて重宝しています。 GitHub - jivadevoe/NSTimer-Blocks: Simple category on NSTimer to give it blocks capability. 実際に使う際には、下記のように使…

文字列を表示するサイズを求めるsizeWithFont:メソッドがiOS 7から非推奨になっているのでワーニングが出ないように置き換える

フォントを指定して、文字列が描画されるサイズを求めるのにiOS 6まではsizeWithFont:メソッドとsizeWithFont:constrainedToSize:lineBreakMode:メソッドを使っていました。iOS 7ではこれらのメソッドの使用が非推奨になっています。 - (CGSize)sizeWithFont…

UITableViewのセクションインデックスの見た目をカスタマイズする

UITableViewは、決められたフォーマット(UITableViewCell)に基づいてリスト形式でデータを表示するクラスです。 データが多くなりリストが長くなった場合には、SectionIndex(セクションインデックス)を使ってセクション単位でのジャンプをする機能を提供しま…

NSStringクラスのdrawInRect:withFont:lineBreakMode:alignment:メソッドをワーニングが出ないように書き換える

NSStringクラスのdrawInRect:withFont:lineBreakMode:alignment:メソッドは、iOS 7.0から「deprecated(非推奨)」となり、下図のようなワーニング表示されるようになりました。 横に長いため全文表示ができていませんが、下記のようなワーニングが表示されて…

クラス名からそのクラスの持っているプロパティの一覧を取得する

クラス名からそのクラスの持っているプロパティの一覧を取得する方法をご紹介します。ログ出力に便利になると思います。 #import <objc/runtime.h> // クラス名からプロパティリストを生成する id lenderClass = objc_getClass([className UTF8String]); unsigned int proper</objc/runtime.h>…

カスタムURLスキームを設定して自分自身のカスタムURLスキームを呼び出す

カスタムURLスキームを使用して他のアプリを起動する方法をいくつか紹介しました。 カスタムURLスキームを使って地図アプリに位置座標を渡して連携起動する - iOSアプリ開発の逆引き辞典 カスタムURLスキームを使って通話アプリに電話番号を渡して連携起動す…

色とサイズを指定して円が描画されたUIImageオブジェクトを生成する

本記事では、UIImageオブジェクトをプログラム(コード)だけで動的に生成する方法を紹介します。 塗りつぶされた円が描画されたUIImageオブジェクトを生成する 塗りつぶされた円を描画するにはCGContextFillEllipseInRect関数を使用します。 - (UIImage *)ima…

色とサイズを指定して1色で塗りつぶされたUIImageオブジェクトを生成する

本記事では、UIImageオブジェクトをプログラム(コード)だけで動的に生成する方法を紹介します。 - (UIImage *)imageWithFillColor:(UIColor *)color size:(CGSize)size { UIImage *image = nil; // ビットマップ形式のグラフィックスコンテキストの生成 UIGr…