emahiro/b.log

Drastically Repeat Yourself !!!!

Bundleを使った画像のロードとキャッシュ from Apple公式チュートリアル

AppleiOS開発の公式チュートリアルに記載されている画像の読み込みについての備忘録。
画像はAssetsに入っているものとし、アプリ内で保持している画像を読み込むという前提。

対象箇所

Appleの公式チュートリアル「JumpRightIn」での画像を指定している箇所は以下。

// Load Button Images
let bundle = Bundle(for: type(of: self))
let filledStar = UIImage(named: "filledStar", in: bundle, compatibleWith: self.traitCollection)
let emptyStar = UIImage(named:"emptyStar", in: bundle, compatibleWith: self.traitCollection)
let highlightedStar = UIImage(named:"highlightedStar", in: bundle, compatibleWith: self.traitCollection)

画像の読み込みとキャッシュの方法について

定数ごとに考察していく。

let bundle = Bundle(for: (type: self)) について

これは、公式のリファレンスを参照すると省略せずに記載すると以下のようになる。

let bundle = Bundle.init(for: (type: self))

公式リファレンスには

//Creating and Initializing a Bundle

init(for: AnyClass)
Returns the NSBundle object with which the specified class is associated.

とあって、任意のクラスに関連する NSBundle オブジェクトを返す。

let **Star = UIImage(named:, in: bundle, compatibleWith: self.traitCollection) について

次にUIImageを初期化している箇所について触れていく。
UIImageの初期化の方法は省略せずに書くと以下

let **Star = UIImage.init?(named: String, in: Bundle?, compatibleWith: UITraitCollection?)

第1引数…Assetsに登録した名称を入れることでAssetsに登録した画像を使える。
第2引数…Bundleオブジェクトを指定することで画像をキャッシュできる。どういうことかというと、Bundleは入れ物オブジェクトのようなものなので、定義したBundleの中に、empty/filled/highlited の3つのステータスの画像を入れることで、3つの画像アセットをキャッシュすることができる。
第3引数…ここでのselfはRatingControlクラスそれ自体を表す。traitCollectionは該当の画像がUIStackViewに関連付けられているかを確認する(公式リファレンスだと、正確にするという訳がつけられる。)
ちなみにnilを入れることも可能であるが、nilの場合、RatingControlのStackViewではなく、この画面のUIView本体に紐づくので、ここではselfでRatignControlクラス自体を指定していると思われる。

参考

以下公式リファレンス参照
Bundle
UIImage
UIImage.init?
Array
enumrated

AtomでMarkdownを使うためのセットアップ

atommarkdownシンタックスハイライトとライブプレビューを使うお話です。

使っているパッケージ

  1. language-markdown
  2. linter-markdown

Core 1. markdown-preview

Markdownプレビュー

Ctl + Shift + Alt を同時に押した状態でキーボードの「M」を押すとMarkdownのプレビューが見れる

お試し投稿

お試し投稿です。

jekyll now で作ったgithubページから移行

もともと jekyll now を使った静的ページでブログ書いてましたが、画像等々を上げる時にホストするサーバーだったりを用意したりするのがめんどくさかったので、どうしようか考えたところ、はてブmarkdownでブログかけるtコトをしったので、思い切ってこちらに変更しました。
とりあえず過去にjekyllで書いた記事はこちらに移行。

ちなみに、はてブには今まで通り技術的な学習の記録だけ書いて、とりあえず無駄なつぶやきは note に書き流していこうと思います。