ケルベロスさんのプログラミング / けるぷろ

プログラマのけるさんことケルベロスです

CoronaSDK - 非同期で画像をダウンロードして表示する

CoronaSDK - 非同期で画像をダウンロードして表示する

display.loadRemoteImageを使います
Corona Docs — API | Libraries | display | loadRemoteImage

local halfW, halfH = display.contentCenterX,display.contentCenterY

local function load_image_listener(ev) -- 1
    if ev.isError then
        print 'load image error' 
    end
end -- load_image_listener

local url = 'https://developer.coronalabs.com/demo/hello.png' 
local imageName = 'tmp.png'
display.loadRemoteImage( url, -- 2
'GET',  -- 3
load_image_listener,  -- 4
imageName,  -- 5
system.TemporaryDirectory,  -- 6
halfW, -- 7
halfH )
  1. コールバックメソッド
  2. ダウンロードするurl
  3. HTTP Methodを指定
  4. コールバックメソッドを指定
  5. 保存する際の名前を指定
  6. 保存するフォルダを指定
  7. 画像の中心位置を指定 ここではdisplayの中心

これで画像が非同期でダウンロードされて、画面の中心に画像が表示されます
f:id:popeyekn:20151211191615p:plain
リストビュー(テーブルビュー)のセル一つ一つに画像を表示するには一手間かかります
詳しくは後ほど記事を書きますが、以下になんとなくの考え方だけ示しておきます

  1. 画像名をあらかじめinsertRowの時点でparamsにいれておく
  2. セルの表示タイミングでloadRemoteImageをする
  3. loadRemoteImageが完了したタイミングでtableView全体の再描画を行う
  4. それぞれのセルはtableView.view.rows[i]で取得することができる
  5. 再描画の際にrow.paramsにいれておいた画像名を使用してdisplay.newImageで画像をロードしてセルに表示する