iOS
 Computer >> コンピューター >  >> プログラミング >> iOS

【Swift入門】UITableViewのセル画像を遅延読み込み(Lazy Loading)する方法

はじめに

iOSアプリでリスト形式の画面を作る際、テーブルビューの各セルにネットワーク上の画像を表示したいケースは非常によくあります。しかし、すべての画像を一括でダウンロードしてしまうと、起動が遅くなったりスクロールがカクついたりする原因になります。
そこで役立つのが「遅延読み込み(Lazy Loading)」という手法です。本記事では、Swiftを使ってテーブルビューのセルに画像を遅延読み込みさせる方法を、手順を追ってわかりやすく解説します。

実装手順

1. テーブルビューとセルの準備

まず、テーブルビューとテーブルビューセルを作成し、セルの中にイメージビュー(UIImageView)を配置します。

次に、作成したセルに対してカスタムクラスを割り当てておきましょう。

2. cellForRowAtメソッドの実装

cellForRow(at:) メソッドに以下のコードを記述します。

let cell = tblView.dequeueReusableCell(withIdentifier: "CustomCell") as! CustomCell
return cell

3. 画像ダウンロード用の関数をextensionとして作成

続いて、URLから画像をダウンロードするための関数を作成し、UIImageViewの拡張(extension)として組み込みます。こうすることで、アプリ内のどのUIImageViewからでもこの機能を再利用できるようになります。

func setImageFromUrl(ImageURL :String) {
    URLSession.shared.dataTask( with: NSURL(string:ImageURL)! as URL, completionHandler: {
        (data, response, error) -> Void in
        DispatchQueue.main.async {
            if let data = data {
                self.image = UIImage(data: data)
            }
        }
    }).resume()
}

4. セルへの適用

最後に、cellForRow(at:) メソッド内で上記の関数を呼び出します。ここでの img は、カスタムクラス内で定義したアウトレット(IBOutlet)接続です。

cell.img.setImageFromUrl(ImageURL: url)

実行結果の確認

この例では、オープンソースで公開されているサンプル画像 “https://homepages.cae.wisc.edu/~ece533/images/boat.png” を使用しています。

同じコードをiPhone 7 Plusのシミュレーターで実行すると、以下のような結果になります。

【Swift入門】UITableViewのセル画像を遅延読み込み(Lazy Loading)する方法

まとめ

URLSessionのdataTaskを使えば、シンプルなコードで非同期の画像ダウンロードを実現できます。特に重要なのは、DispatchQueue.main.async でメインスレッド上のUI更新を行っている点です。UI操作は必ずメインスレッドで行う必要があるため、この書き方を覚えておきましょう。

より実用的なアプリを目指す場合は、画像のキャッシュ管理やダウンロード中のプレースホルダー表示の追加、あるいは SDWebImage や Kingfisher といった定番ライブラリの活用も検討すると良いでしょう。

  1. Pythonで画像を読み込む方法:OpenCVとPILを使った基本操作を解説

    OpenCVによる画像処理OpenCV(Open Source Computer Vision)は、機械学習とコンピュータビジョンのために開発されたオープンソースのプログラミングライブラリです。コンピュータビジョンアプリケーション開発のための共通基盤を提供し、商用製品への機械学習の導入を迅速化します。OpenCVには、2,500以上の最適化されたアルゴリズムが含まれており、古典的な手法から最先端の手法まで、コンピュータビジョンと機械学習の両分野をカバーしています。これらの豊富なアルゴリズムにより、顔検出・認識、物体识别、動画内の人間の動作の分類、カメラの動きの追跡、複数画像の結合による高解像度

  2. 【Python×OpenCV】画像の収縮(エロージョン)と膨張(ダイレーション)の基本を解説

    本記事では、PythonのOpenCVモジュールを使って、エロージョン(収縮)やダイレーション(膨張)といったモルフォロジー演算(形態学的処理)を実行する方法を解説します。 OpenCVはコンピュータビジョン向けに設計されたオープンソースのライブラリで、もともとはIntelによって開発されました。BSDライセンスのもとで誰でも無料で利用できます。 OpenCVの機能を使うには、まずpipでインストールしておきましょう。 sudo pip3 install opencv-python エロージョン(収縮)とは?仕組みを解説 エロージョンは、前景オブジェクトの境界を削り取っていく処理です。画像内の