前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Xamarin.iOS(百分比进度条)网络图片加载

Xamarin.iOS(百分比进度条)网络图片加载

原创
作者头像
用户1103568
修改2021-05-21 11:08:34
1.1K0
修改2021-05-21 11:08:34
举报
文章被收录于专栏:xamarinxamarin

xamarin


SDWebImage本是ObjC的一个开源控件,在gitub上有对Xamarin的完整binding封装,同时还将其支持UIImageView/UIButton等控件的扩展方法,参考博文的功能说明(SDWebImage):

功能 1.为UIImageView、UIButton加载网络图片,为Cocoa Touch框架提供缓存管理。

2.异步图片下载

3.异步内存+磁盘图片缓存,自动缓存过期处理。

4.确保同一个url不会被加载很多次

5.确保虚假url不会被重复提交很多次

简单来说就是其能够对网络图片进行内存管理及本地存储管理,并且能够手工清除内存及本地缓存。

SDWebImage单独使用

1.WebCahce>>UIImageView/UIButton图片加载(可设置默认图片及完成回调)

代码语言:txt
复制
partial void ImageButton_TouchUpInside (UIButton sender)  
{  
    this.LoadingView.StartAnimating();  
    string url = "http://www.51ppt.com.cn/Article/Uploadphotos_0708/200604/200641473458360.png";  
    this.ImageButton.SetImage(url,UIControlState.Normal,null,SDWebImageOptions.None,(img,error,cache)=>{  
        this.LoadingView.StopAnimating();  
    });  
}  
代码语言:txt
复制
private void LoadClick()  
{  
<span style="white-space:pre">    </span>string url = "http://d.hiphotos.baidu.com/image/pic/item/8cb1cb1349540923b6a062619058d109b2de49e7.jpg";  
    this.LoadingView.StartAnimating ();  
    this.webImageView.SetImage (url,null,SDWebImageOptions.None,null,(img,error,cache)=>{  
        this.LoadingView.StopAnimating();  
    });  
    //this.webImageView.SetImage (url,UIImage.FromFile("temp.png"),SDWebImageOptions.None,null,null);  
}  

2.SDWebImageManager单例

1)图片下载

代码语言:txt
复制
private void SDLoad()  
{  
    string url = "http://g.hiphotos.baidu.com/image/pic/item/3bf33a87e950352a808d060f5043fbf2b3118bcc.jpg";  
    var manager = SDWebImageManager.SharedManager;  
    manager.Download (url,SDWebImageOptions.None,null,CompletedHandler);  
}  
  
void CompletedHandler (UIImage image, NSError error, SDImageCacheType cacheType,bool finshed)  
{  
    Console.WriteLine ("Reuslt>>"+finshed);  
    this.InvokeOnMainThread (()=>{  
        this.TableView.BackgroundColor = UIColor.FromPatternImage(image);  
    });  
} 

2)内存清理及本地删除

代码语言:txt
复制
private void DelClcik( )  
{  
    SDWebImageManager.SharedManager.ImageCache.ClearMemory ();  //清空内存  
    SDWebImageManager.SharedManager.ImageCache.ClearDisk ();    //清除本地  
}  

SDWebImage与进度条使用

1.RadialProgressView/UIProgressView

三种类型Big,Small,Tiny

代码语言:txt
复制
public override void ViewDidLoad ()  
{  
    base.ViewDidLoad ();  
    // Add our different styles of RadialProgressViews  
    bigRadialProgressView = new RadialProgressView ();  
    bigRadialProgressView.Center = new PointF (View.Center.X, View.Center.Y - 100);  
    bigRadialProgressView.AutoresizingMask = UIViewAutoresizing.FlexibleMargins;  
    View.AddSubview (bigRadialProgressView);  
  
    smallRadialProgressView = new RadialProgressView (RadialProgressViewStyle.Small);  
    smallRadialProgressView.ProgressColor = UIColor.Gray;  
    smallRadialProgressView.Center = new PointF (bigRadialProgressView.Frame.Left / 2, bigRadialProgressView.Center.Y);  
    smallRadialProgressView.AutoresizingMask = UIViewAutoresizing.FlexibleMargins;  
    View.AddSubview (smallRadialProgressView);  
  
    tinyRadialProgressView = new RadialProgressView (RadialProgressViewStyle.Tiny);  
    tinyRadialProgressView.ProgressColor = UIColor.White;  
    tinyRadialProgressView.Center = new PointF (bigRadialProgressView.Frame.Right + (View.Frame.Width - bigRadialProgressView.Frame.Right) / 2, bigRadialProgressView.Center.Y);  
    tinyRadialProgressView.AutoresizingMask = UIViewAutoresizing.FlexibleMargins;  
    View.AddSubview (tinyRadialProgressView);  
  
    standardProgressView = new UIProgressView (UIProgressViewStyle.Bar);  
    standardProgressView.Frame = new RectangleF (30, bigRadialProgressView.Frame.Bottom + 80, View.Frame.Width - 60, 10);  
    standardProgressView.AutoresizingMask = UIViewAutoresizing.FlexibleBottomMargin | UIViewAutoresizing.FlexibleTopMargin | UIViewAutoresizing.FlexibleWidth;  
    View.AddSubview (standardProgressView);  
  
    startProgressButton = UIButton.FromType (UIButtonType.RoundedRect);  
    startProgressButton.Frame = new RectangleF (50, standardProgressView.Frame.Bottom + 40, View.Frame.Width - 100, 30);  
    startProgressButton.SetTitle ("Start Progress", UIControlState.Normal);  
    startProgressButton.AutoresizingMask = UIViewAutoresizing.FlexibleBottomMargin | UIViewAutoresizing.FlexibleTopMargin | UIViewAutoresizing.FlexibleWidth;  
    startProgressButton.TouchUpInside += OnStartProgressTapped;  
    View.AddSubview (startProgressButton);  
}

2.SDWebImage回调操作

代码语言:txt
复制
void OnStartProgressTapped (object sender, EventArgs e)  
{  
    string url = "http://g.hiphotos.baidu.com/image/pic/item/3bf33a87e950352a808d060f5043fbf2b3118bcc.jpg";  
  
    standardProgressView.Progress = 0;  
    bigRadialProgressView.Reset ();  
    smallRadialProgressView.Reset ();  
    tinyRadialProgressView.Reset ();  
  
    this.ImageView.SetImage (url,null, SDWebImageOptions.SDWebImageProgressiveDownload, ProgressHandler, CompletedHandler);  
}  
  
/// <summary>  
/// 实时下载数据  
/// </summary>  
/// <param name="receivedSize">当前下载量.</param>  
/// <param name="expectedSize">总量.</param>  
void ProgressHandler (uint receivedSize, long expectedSize)  
{  
    Console.WriteLine ("receivedSize -- expectedSize -- "+receivedSize+" -- " + expectedSize);  
    var value = (float)receivedSize / (float)expectedSize;  
    if(value != 0){  
        Console.WriteLine ("Value>>"+value);  
        this.InvokeOnMainThread (()=>{  
            bigRadialProgressView.Value = value;  
            smallRadialProgressView.Value = value;  
            tinyRadialProgressView.Value = value;  
            standardProgressView.Progress = value;  
        });  
    }  
}  
  
void CompletedHandler (UIImage image, NSError error, SDImageCacheType cacheType)  
{  
    this.InvokeOnMainThread (()=>{  
        UIView.Animate (0.1f,()=>{  
            bigRadialProgressView.Alpha = 0.0f;  
            smallRadialProgressView.Alpha = 0.0f;  
            tinyRadialProgressView.Alpha = 0.0f;  
            standardProgressView.Alpha = 0.0f;  
        },()=>{  
            bigRadialProgressView.RemoveFromSuperview();  
            smallRadialProgressView.RemoveFromSuperview();  
            tinyRadialProgressView.RemoveFromSuperview();  
            standardProgressView.RemoveFromSuperview();  
        });  
    });  
}  

undefined

参考资源

源码:Xamarin studio(5.5.2) Xamarin.iOS(8.2.0.207) Xcode(5.1.1)

原生(SDWebImage)>>https://github.com/rs/SDWebImage/

Xamarin组件(SDWebImage)>>http://components.xamarin.com/view/sdwebimage

Xamarin组件Binding(SDWebImage)>>https://github.com/stampsy/sdwebimage-monotouch

Xamarin组件圆形进度条(Radialprogress)>>http://components.xamarin.com/view/radialprogress

Xamarin三方Binding>>https://github.com/mono/monotouch-bindings

作者:zhaowensky_126 原文地址:http://blog.csdn.net/zhaowensky_126/article/details/40187677

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SDWebImage单独使用
  • 2.SDWebImageManager单例
  • SDWebImage与进度条使用
  • 2.SDWebImage回调操作
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档