swift UIImage加载远程图片和圆角矩形

UIImage这个对象是swift中的图像类,可以使用UIImageView加载显示到View上。

以下是UIImage的构造函数:

    init(named name: String!) -> UIImage // load from main bundle
    init(named name: String!, inBundle bundle: NSBundle!, compatibleWithTraitCollection traitCollection: UITraitCollection!) -> UIImage

    init(contentsOfFile path: String!)
    init(data: NSData!)
    init(data: NSData!, scale: CGFloat)
    init(CGImage cgImage: CGImage!)
    init(CGImage cgImage: CGImage!, scale: CGFloat, orientation: UIImageOrientation)
    init(CIImage ciImage: CIImage!)
    init(CIImage ciImage: CIImage!, scale: CGFloat, orientation: UIImageOrientation)

 

第一种,可以直接指定图片的名称来加载图像,但这种图片必须是以资源文件形式才可以正常加载。

var img = UIImage(named:"04")    //初始化图片
var vImg = UIImageView(image: img);   //初始化图片View
vImg.frame.origin = CGPoint(x:0,y:20);   //指定图片显示的位置
//vImg.frame = CGRect(x:0,y:20,width:120,height:120);   //指定图片的位置以及显示的大小
self.view.addSubview(vImg);   //显示在View上

  

第二种,可以使用data来构造函数,参数data须要是NSData对象。相比较来说,NSData更加灵活,你可以使用NSData加载本地文件,也可以加载网络地址文件。

NSData是什么呢?我的理解就是适合网络传输的二进制数据(或者相类似的理解)

init(contentsOfFile path: String!)
init(contentsOfURL url: NSURL!)

  

这个是NSData其中的2个构造函数, 通过这2个构造函数,我们可以指定文件本地路径或者网络路径来将图像转换为NSData对象。我想指定本地路径的方法,可能在由用户指定背景图片(头像)或者背景音乐之类的情况下比较合适。

        var nsd = NSData(contentsOfURL:NSURL.URLWithString("http://ww2.sinaimg.cn/bmiddle/632dab64jw1ehgcjf2rd5j20ak07w767.jpg"))

        var img = UIImage(data: nsd);
        var vImg = UIImageView(image: img);
        vImg.frame.origin = CGPoint(x:0,y:20);
        //vImg.frame = CGRect(x:0,y:20,width:120,height:120);
        self.view.addSubview(vImg);

  

在使用UIImageView对象加载并显示到View时,有时候我们仅需指定图像的xy点即可,如果同时指定了width和height的话,图像显示会变形的。所以在这里,我只指定了frame的origin(CGPoint),而没有指定CGSize. 但有时候显示出来的图片虽然没有变形,但会太大,或者太小,同样对视觉造成影响。这个时候,可以在创建UIImage对象的时候,指定scale来对图像进行缩放来适应设备size。但这个参数我尝试了下,发现和我的理解还是有些偏差的。如果=1,是正常大小,如果小于1,比如0.5,会发现图片基本是原来尺寸的2倍,反而设置为1.5,或者2,数据越大,比例越小。

        var nsd = NSData(contentsOfURL:NSURL.URLWithString("http://ww2.sinaimg.cn/bmiddle/632dab64jw1ehgcjf2rd5j20ak07w767.jpg"))

        var img = UIImage(data: nsd,scale:1.5);  //在这里对图片显示进行比例缩放
        var vImg = UIImageView(image: img);
        vImg.frame.origin = CGPoint(x:0,y:20);
        //vImg.frame = CGRect(x:0,y:20,width:120,height:120);
        self.view.addSubview(vImg);

以下是官方对scale参数的解释:

The scale factor to assume when interpreting the image data. Applying a scale factor of 1.0 results in an image whose size matches the pixel-based dimensions of the image. Applying a different scale factor changes the size of the image as reported by the size property.

总结:

1)如果需要显示app自带的资源文件,可以直接使用UIImage的构造函数:named来直接拉取资源文件。

2)如果要显示本地或者网络资源文件,则需要使用NSData,来拉取对应文件的DATA,最后显示到UIImageView中去。

3)UIImage在构造时,scale的参数需要进一步理解。

4)如果文件尺寸未知的情况下,最好不要对其width和height进行限制。可使用UIView.frame.origin(CGPoint)来指定左上角坐标。同样,也可以单独指定UIView.frame.size来指定CGSize.

5)如果仅指定图像左上角坐标,但又想文件按比例缩放,可以使用vImg的contentMode属性枚举值

        var nsd = NSData(contentsOfURL:NSURL.URLWithString("http://ww2.sinaimg.cn/bmiddle/632dab64jw1ehgcjf2rd5j20ak07w767.jpg"))

        var img = UIImage(data: nsd,scale:1.5);
        var vImg = UIImageView(image: img);
        vImg.frame.origin = CGPoint(x:0,y:20);
        //vImg.frame.size.height = 100//self.view.bounds.width;
        //vImg.frame = CGRect(x:0,y:20,width:120,height:120);
        vImg.contentMode = UIViewContentMode.ScaleAspectFit;

        self.view.addSubview(vImg);

  

enum UIViewContentMode : Int {
    case ScaleToFill
    case ScaleAspectFit // contents scaled to fit with fixed aspect. remainder is transparent
    case ScaleAspectFill // contents scaled to fill with fixed aspect. some portion of content may be clipped.
    case Redraw // redraw on bounds change (calls -setNeedsDisplay)
    case Center // contents remain same size. positioned adjusted.
    case Top
    case Bottom
    case Left
    case Right
    case TopLeft
    case TopRight
    case BottomLeft
    case BottomRight
}

  

最后,如果需要对加载的图像进行圆角矩形处理,可以对UIImageView的Layer属性设置

vImg.layer.cornerRadius = 8;
vImg.layer.masksToBounds = true;

  

swift UIImage加载远程图片和圆角矩形

时间: 2024-07-31 14:34:51

swift UIImage加载远程图片和圆角矩形的相关文章

UIImage加载本地图片的两种方式

UIImage加载图片方式一般有两种: (1)imagedNamed初始化:默认加载图片成功后会内存中缓存图片,这个方法用一个指定的名字在系统缓存中查找并返回一个图片对象.如果缓存中没有找到相应的图片对象,则从指定地方加载图片然后缓存对象,并返回这个图片对象. (2)imageWithContentsOfFile初始化:则仅只加载图片,不缓存. 大量使用imageNamed方式会在不需要缓存的地方额外增加开销CPU的时间来做这件事.当应用程序需要加载一张比较大的图片并且使用一次性,那么其实是没有

swift Codova 加载远程链接

OC版本: swift 版本: 参考链接: swift4 重写init方法 https://www.jianshu.com/p/3a7e05ce91be https://www.jianshu.com/p/3a7e05ce91be Cordoval在iOS中的运用整理(这一篇料很足) http://www.cnblogs.com/wujy/p/5646341.html IOS CORDOVA 加载远程界面 https://www.cnblogs.com/tufeibo/p/5830144.htm

初学IOS遇到的问题(二)UIImage加载图片遇到的问题

问题产生过程: 图片资源放在Assets.xcassets中,分别用UIImage的类方法imageNamed和imageWithContentsOfFile获取图片对象,但发生奇怪的情况,前者获取到图片对象,后者结果为nil.代码如下: 1.通过UIImage的类方法imageNamed:可以获取到图片对象. NSString *imageName = @"test.jpg"; UIImage *img = [UIImage imageNamed:imageName]; 2.但通过U

iOS面试题之加载单张图片到底会不会崩溃?

今天,一哥们去某公司面试iOS职位.其中一道题目问,加载一张图片,到底会不会崩溃呢? 我拿到这个问题,当时以为是获取网络图片,那还是可能崩溃的,但实际问题,还有半句,图片是本地的... 这问题,加载本地的怎么会崩溃呢?写这么久加载图片也没遇到如此问题. =================================================== 原来,iPhone毕竟是手持设备,它所占有的内存是有限的,当图片过大的时候会引起内存导致的崩溃现象. 后来,我又查了下,发现,原来还有这么大学

SDWebImage 源码分析 --加载gif图片

n年关了,马上放假,终于把手头上的事情告一段落,连续发布了3个app,我也是醉了. 终于有了点时间.想研究下SDWebImage是怎么加载gif图片的. 一直很好奇. 现在开始. 1,首先我们看下SDWebImage是怎么加载gif的. faceButton.image = [UIImage sd_animatedGIFNamed:[NSString stringWithFormat:@"CHATA_%d",i - 46]]; sd_animatedGIFNamed是SDWebImag

xss 加载远程第三方JS

script 没有调用远程平台,用web接收cookie <script>window.open('http://xxx.xxx/cookie.asp?msg='+document.cookie)</script> 简单的script链接远程第三方js,省略协议,浏览器自动加载当前页面的协议 <script src=//xxx.xxx/a.js></script> img图片 图片创建script节点,链接远程第三方JS <img src=x oner

win32用GDI+加载png图片作为背景图

#include <windows.h> #include <gdiplus.h> /* GDI+ startup token */ ULONG_PTR gdiplusStartupToken; /* Declare Windows procedure */ LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); // UpdateLayeredWindow Defination typedef BOOL(*UP

有效解决Android加载大图片时内存溢出的问题

首先解析一下基本的知识: 位图模式,bitmap颜色位数是1位 灰度模式,bitmap颜色位数是8位,和256色一样 RGB模式,bitmap颜色位数是24位 在RGB模式下,一个像素对应的是红.绿.蓝三个字节 CMYK模式,bitmap颜色位数是32位  在CMYK模式下,一个像素对应的是青.品.黄.黑四个字节 图像文件的字节数(Byte) = 图像分辨率*颜色深度/8(bit/8) 例如:一幅640*480图像分辨率.RGB色一般为24位真彩色,图像未经压缩的数据容量为:640X480X24

图片预加载与图片懒加载的区别与实现

预加载与懒加载,我们经常经常用到,这些技术不仅仅限于图片加载,我们今天讨论的是图片加载: 一.什么是图片预加载与懒加载: 图片预加载:顾名思义,图片预加载就是在网页全部加载之前,提前加载图片.当用户需要查看时可直接从本地缓存中渲染,以提供给用户更好的体验,减少等待的时间.否则,如果一个页面的内容过于庞大,没有使用预加载技术的页面就会长时间的展现为一片空白,这样浏览者可能以为图片预览慢而没兴趣浏览,把网页关掉,这时,就需要图片预加载.当然这种做法实际上牺牲了服务器的性能换取了更好的用户体验. 图