(1)通过创建ALAssetsLibrary的实例可以访问系统Photos里的图片与视频。这里图片不仅包括相机拍摄的照片,还包括从iTunes导入的和从其他设备里面导入的图片。
(2)从ALAssetsLibrary实例中获取得到的对象的生命周期和ALAssetsLibrary这个实例的生命周期一致。
--- 首页 ViewController.swift ---
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
import UIKit
import AssetsLibrary
class ViewController : UICollectionViewController {
//资源库管理类
var assetsLibrary = ALAssetsLibrary ()
//保存照片集合
var assets = [ ALAsset ]()
override func viewDidLoad() {
super .viewDidLoad()
var countOne = 0
//ALAssetsGroupSavedPhotos表示只读取相机胶卷(ALAssetsGroupAll则读取全部相簿)
assetsLibrary.enumerateGroupsWithTypes( ALAssetsGroupSavedPhotos , usingBlock: {
(group: ALAssetsGroup !, stop) in
println ( "is goin" )
if group != nil
{
var assetBlock : ALAssetsGroupEnumerationResultsBlock = {
(result: ALAsset !, index: Int , stop) in
if result != nil
{
self .assets.append(result)
countOne++
}
}
group.enumerateAssetsUsingBlock(assetBlock)
println ( "assets:\(countOne)" )
//collectionView网格重载数据
self .collectionView?.reloadData()
}
}, failureBlock: { (fail) in
println (fail)
})
}
// CollectionView行数
override func collectionView(collectionView: UICollectionView ,
numberOfItemsInSection section: Int ) -> Int {
return assets.count;
}
// 获取单元格
override func collectionView(collectionView: UICollectionView ,
cellForItemAtIndexPath indexPath: NSIndexPath ) -> UICollectionViewCell {
// storyboard里设计的单元格
let identify: String = "DesignViewCell"
// 获取设计的单元格,不需要再动态添加界面元素
let cell = self .collectionView?.dequeueReusableCellWithReuseIdentifier(
identify, forIndexPath: indexPath) as ! UICollectionViewCell
//取缩略图
var myAsset = assets[indexPath.item]
var image = UIImage ( CGImage :myAsset.thumbnail().takeUnretainedValue())
// 从界面查找到控件元素并设置属性
(cell.contentView.viewWithTag(1) as ! UIImageView ).image = image
return cell
}
// 单元格点击响应
override func collectionView(collectionView: UICollectionView ,
didSelectItemAtIndexPath indexPath: NSIndexPath ) {
var myAsset = assets[indexPath.item]
//这里不使用segue跳转(建议用segue跳转)
var detailViewController = UIStoryboard (name: "Main" , bundle: nil )
.instantiateViewControllerWithIdentifier( "detail" ) as ! ImageDetailViewController
detailViewController.myAsset = self .assets[indexPath.row]
// navigationController跳转到detailViewController
self .navigationController!.pushViewController(detailViewController, animated: true )
}
override func didReceiveMemoryWarning() {
super .didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
} |
--- 详情页 ImageDetailViewController.swift ---
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
import UIKit
import AssetsLibrary
class ImageDetailViewController : UIViewController {
//选中的图片资源
var myAsset: ALAsset !
//用于显示图片信息
@IBOutlet weak var textView: UITextView !
//用于显示原图
@IBOutlet weak var imageView: UIImageView !
override func viewDidLoad() {
super .viewDidLoad()
//获取文件名
var representation = myAsset.defaultRepresentation()
self .title = representation.filename()
//获取图片信息
textView.text = "日期:\(myAsset.valueForProperty(ALAssetPropertyDate))\n"
+ "类型:\(myAsset.valueForProperty(ALAssetPropertyType))\n"
+ "位置:\(myAsset.valueForProperty(ALAssetPropertyLocation))\n"
+ "时长:\(myAsset.valueForProperty(ALAssetPropertyDuration))\n"
+ "方向:\(myAsset.valueForProperty(ALAssetPropertyOrientation))"
//获取原图
var imageBuffer = UnsafeMutablePointer < UInt8 >.alloc( Int (representation.size()))
var bufferSize = representation.getBytes(imageBuffer, fromOffset: Int64 (0),
length: Int (representation.size()), error: nil )
var data = NSData (bytesNoCopy:imageBuffer ,length:bufferSize, freeWhenDone: true )
imageView.image = UIImage (data: data)
}
override func didReceiveMemoryWarning() {
super .didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
} |
Swift - 使用ALAssetsLibrary获取相簿里所有图片,视频(附样例)的更多相关文章
-
Swift - 本地消息的推送通知(附样例)
使用UILocalNotification可以很方便的实现消息的推送功能.我们可以设置这个消息的推送时间,推送内容等. 当推送时间一到,不管用户在桌面还是其他应用中,屏幕上方会都显示出推送消息. 1, ...
-
Swift - 动画效果的实现方法总结(附样例)
在iOS中,实现动画有两种方法.一个是统一的animateWithDuration,另一个是组合出现的beginAnimations和commitAnimations.这三个方法都是类方法. 一,使用 ...
-
Swift - 反射(Reflection)的介绍与使用样例(附KVC介绍)
1,反射(Reflection) 对于C#.Java开发人员来说,肯定都对反射这个概念相当熟悉.所谓反射就是可以动态获取类型.成员信息,同时在运行时(而非编译时)可以动态调用任意方法.属性等行为的特性 ...
-
Android 开发 ContentProvider 获取歌曲列表和联系人的样例
ContentProvider(内容提供者)是Android中的四大组件之中的一个. 主要用于对外共享数据.也就是通过ContentProvider把应用中的数据共享给其它应用訪问.其它应用能够通过C ...
-
Swift - 数组排序方法(附样例)
下面通过一个样例演示如何对数组元素进行排序.数组内为自定义用户对象,最终要实现按用户名排序,数据如下: 1 2 3 4 var userList = [UserInfo]() userList.app ...
-
iOS获取本地沙盒视频封面图片(含swift实现)
最近做了个小应用,有涉及到本地视频播放及列表显示. 其中一个知识点就是获取本地存储视频,用来界面中的封面显示. 记录如下: //videoURL:本地视频路径 time:用来控制视频播放的时间点图片截 ...
-
iOS-使用ALAssetsLibrary获取相册图片视频
用ALAssetsLibrary获取相册图片视频 ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; [library enumera ...
-
iOS获取本地沙盒视频封面图片
最近做了个小应用,有涉及到本地视频播放及列表显示. 其中一个知识点就是获取本地存储视频,用来界面中的封面显示. 记录如下: -(UIImage*) thumbnailImageForVideo:(NS ...
-
在html里添加视频的方法
在html里添加本地视频的方法: <!DOCTYPE HTML><html><body><video width="320" height ...
随机推荐
-
php正则获取html图片标签信息(采集图片)
php获取html图片标签信息(采集图片),实现图片采集及其他功能,带代码如下: <?php $str="<img src='./a.jpg'/>111111<img ...
-
isInstance和isAssignableFrom的用法
String str = ""; Object o = new Object(); System.out.println(String.class.isInstance(o)); ...
-
2014 年10个最佳的PHP图像操作库
2014 年10个最佳的PHP图像操作库 Thomas Boutell 以及众多的开发者创造了以GD图形库闻名的一个图形软件库,用于动态的图形计算. GD提供了对于诸如C, Perl, Pytho ...
-
iOS Dev (20) 用 AVAudioPlayer 播放一个本地音频文件
iOS Dev (20) 用 AVAudioPlayer 播放一个本地音频文件 作者:CSDN 大锐哥 博客:http://blog.csdn.net/prevention 步骤 第一步:在 Proj ...
-
beautifulSoup模块
这个库用来对网页进行解析功能,十分强大,有了它我们可以减少对正则的使用,也能顺利的从网页源码中拿到我们要的值.他是一个灵活,方便的网页解析库,处理高效,支持多种解析器. 这个库把HTML源码解析成对象 ...
-
在iOS App 中添加启动画面
你可以认为你需要为启动画面编写代码,然而Apple 让你可以非常简单地在Xcode中完成.不需要编写代码,你仅需要在Xcode中进行一些配置. 1.什么是启动画面(Splash Screen)? 启动 ...
-
【NOI2014】起床困难综合症(贪心)
[NOI2014]起床困难综合症(贪心) 题面 Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚 ...
-
Java 并发基础——线程安全性
当线程安全:多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协调,这个类都能表现出正确的行为,那么久称这个类是线程安全的. 在线程 ...
-
解决android 大图OOM的两种方法
最近做程序中,需要用到一张大图.这张图片是2880*2180大小的,在我开发所用的华为3C手机上显示没有问题,但是给米3装的时候,一打开马上报OOM错误.给nexus5装,则是图片无法出来,DDMS中 ...
-
ArcSDE数据库连接(直连、服务连)与GT_Geometry存储配置图解
众说周知,ArcSDE空间数据库引擎提供了两种连接数据库的方式.一是服务连接方式,一是直连方式.后者也是Esri所推崇的方式.但是,在客户的生产环境和开发商的开发环境中这两种方式都是有需求的.下面就以 ...