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加载远程图片和圆角矩形的更多相关文章
- UIImage加载本地图片的两种方式
UIImage加载图片方式一般有两种: (1)imagedNamed初始化:默认加载图片成功后会内存中缓存图片,这个方法用一个指定的名字在系统缓存中查找并返回一个图片对象.如果缓存中没有找到相应的图片 ...
- UIImage加载图片的方式以及Images.xcassets对于加载方法的影响
UIImage加载图片的方式以及Images.xcassets对于加载方法的影响 图片缓存 根据是否将创建好的对象缓存入系统内存,有两类创建UIImage对象的方法可选: 缓存:+ imageName ...
- jQuery.ajax( options ) : 通过 HTTP 请求加载远程数据
jQuery.ajax( options ) : 通过 HTTP 请求加载远程数据 这个是jQuery 的底层 AJAX 实现.简单易用的高层实现见 $.get, $.post 等. $.ajax() ...
- xss 加载远程第三方JS
script 没有调用远程平台,用web接收cookie <script>window.open('http://xxx.xxx/cookie.asp?msg='+document.coo ...
- AIRSDK 3.7 加载远程的含有代码的swf文件
之前就说这个版本会解决可以加载远程的含有代码的swf文件的需求.但是,一直比较好奇这个是否行得通,还以为 Adobe 副总裁去了苹果,内部给了特殊待遇. 因为苹果一直就是不允许远程加载代码的,像js文 ...
- Android View加载圆形图片且同时绘制圆形图片的外部边缘边线及边框:LayerDrawable实现
Android View加载圆形图片且同时绘制圆形图片的外部边缘边线及边框:LayerDrawable实现 LayerDrawable实现的结果和附录文章1,2,3中的layer-list一致. ...
- Android ImageView加载圆形图片且同时绘制圆形图片的外部边缘边线及边框
Android ImageView加载圆形图片且同时绘制圆形图片的外部边缘边线及边框 在Android早期的开发中,如果涉及到圆形图片的处理,往往需要借助于第三方的实现,见附录文章1,2.And ...
- 加载GIF图片优化方案
前言 许多项目需要加载GIF图片,但是在直接使用UIImageView加载存在许多问题,于是查找资料做了一个加载GIF的Demo,思路来源. 思路 使用FLAnimatedImage来加载GIF图片, ...
- iOS Cordova 加载远程界面
老大说,我们的项目要hybrid,要实现1.html能调用native:2.本地html调用本地html界面:3.能加载远程界面..... 因为我的项目是已有的(以下简称 项目),所以是要在已有的项目 ...
随机推荐
- 安卓开发基础之tween动画基本使用,代码教学
xml代码块: <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:andro ...
- DevExpress ASPxSplitter ClientSideEvents-PaneExpanded 时间用法
在webform中的devexpress aspxsplitter中套用了jquery-easyui的 tabs id=tt <div id="tt" class=" ...
- js和jquery获取父级元素、子级元素、兄弟元素的方法
最近工作中总遇到取各种父啊子啊兄弟姐妹啊,每次都得查,这次整理个全乎的~ [js的获取方式] function dom(){ var a = document.getElementByIdx ...
- OSGI.NET 框架浅析
关于osgi.net ,想必大家也听说过,以下是自己在学习osgi.net 过程中整理出来的内容,供大家学习参与使用. 1. UIOSP 开放工厂框架架构 开放工厂所有插件基于OSGi.NET面向服 ...
- Mysql 创建用户 授权
一, 创建用户: 命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明:username - 你将创建的用户名, host - 指 ...
- PaintView 绘图控件解析
博客地址:博客园,版权所有,转载须联系作者. GitHub地址:JustWeTools 最近做了个绘图的控件,实现了一些有趣的功能. 先上效果图: PaintView画图工具: 1.可直接使用设定按钮 ...
- Stanford机器学习笔记-8. 支持向量机(SVMs)概述
8. Support Vector Machines(SVMs) Content 8. Support Vector Machines(SVMs) 8.1 Optimization Objection ...
- KEngine策划指南:配置表格的编辑与编译
策划与程序的桥梁 执行策划在游戏开发的过程中的主要工作是什么?当然就是和Excel打交道了.大量的Excel数据表,最终会被演变成游戏的配置数据.日常游戏开发中,策划编辑配置表一般有两种方式: 编译式 ...
- c# winforms TextBox的记忆功能
c# winforms TextBox的记忆功能 1:在项目上点右键 sproperties-settings 添加项目 如 MyText 类型 String 2: 获取值: string l ...
- PHP中文名文件下载实现
php下载文件的流程: 其实就是给予一个链接: <a href="指向处理文件的地址"></a> 这样,当前端点击链接的时候,指向处理文件,比如downl ...