私のアプリでMonoTouch.Dialogを使用しています。しかし、問題のフォームは、私はTableViewを追加したUIViewControllerを使って実装されています(私はUIToolbarを追加することもできます)。ImageLoaderのデフォルトイメージを設定する方法はありますか?
私はMonoTouch.Dialog.Utilitiesに付属しているImageLoaderが大好きで、ImageViewerのDataSourceのGetCell()メソッドでそれを使ってURLから画像をレンダリングしようとしています。
var callback = new ImageLoaderCallback(controller, cell.ImageView, indexPath); // ImageLoaderCallback implements IImageUpdated
cell.ImageView.Image = ImageLoader.DefaultRequestImage(new Uri(picFV.Value), callback);
問題は、URLがダウンロードされるまで(画像の右側にあるテキストは実際にはテーブルの左側に固定されるように)、ImageViewのためのスペースが縮小されていることです。
ImageLoaderがイメージの取得とレンダリングを完了したときに、ユーザーエクスペリエンスが不快感を与えることがないように、ダウンロードしたイメージと同じサイズの一時的なローカルイメージを表示します。
GetCell()コールで次のことを試みました... cell.ImageView.Imageが他のイメージに設定されています(下に表示されていません)。ImageLoader.DefaultRequestImage 。
var image = ImageLoader.DefaultRequestImage(new Uri(picFV.Value), callback);
callback.Image = image;
最後の行は、コールバックの状態にImageLoaderによって返された画像の参照を詰め、そしてImageLoaderが行われたときにコールバックは、セルのImageView.Imageを交換します(下記参照):しかし
// callback class for the MonoTouch.Dialog image loader utility
private class ImageLoaderCallback : IImageUpdated
{
private ListViewController controller;
private UIImageView imageView;
private NSIndexPath indexPath;
public ImageLoaderCallback(ListViewController c, UIImageView view, NSIndexPath path)
{
controller = c;
imageView = view;
indexPath = path;
}
public UIImage Image { get; set; }
void IImageUpdated.UpdatedImage(Uri uri)
{
if (uri == null)
return;
if (Image != null)
imageView.Image = Image;
// refresh the display for the row of the image that just got updated
controller.TableView.ReloadRows(new NSIndexPath [] { indexPath }, UITableViewRowAnimation.None);
}
}
ImageViewerがImageViewをレンダリングしようとすると、ImageLoaderがTableViewによって「引っ張られる」必要があるように見えます(つまり、誰もURLを引き出していないためImageLoaderコールバックが呼び出されません)。
このシナリオをどのように達成できますか?
ありがとうございます!