0

アプリでMonoTouch.Dialogを使用しています。ただし、問題のフォームは、TableViewを追加したUIViewControllerを使用して実装されます(したがって、UIToolbarを追加することもできます)。

私はMonoTouch.Dialog.Utilitiesに含まれているImageLoaderが大好きで、TableViewの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);                
        }
    }

ただし、これは機能しません。これは、ImageLoaderがImageViewをレンダリングしようとするときに、TableViewによって「プル」される必要があるように見えるためです(つまり、誰もURLをプルしていないため、ImageLoaderコールバックが呼び出されることはありません)。

このシナリオを達成するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

1

私はこれが古い質問であることを知っていますが、同じことを検索しているときにそれを見つけ、これを達成する方法を述べている次のブログ投稿を見ました。まだ試していませんが、将来、あなたや他の誰かがこれに遭遇するのに役立つことを願っています:http: //yusinto.blogspot.co.uk/2012/05/background-image-downloading-with.html

于 2013-01-03T11:48:38.610 に答える