1,ALAssetsLibrary介绍
(1)通过创建ALAssetsLibrary的实例可以访问系统Photos里的图片与视频。这里图片不仅包括相机拍摄的照片,还包括从iTunes导入的和从其他设备里面导入的图片。
(2)从ALAssetsLibrary实例中获取得到的对象的生命周期和ALAssetsLibrary这个实例的生命周期一致。

(3)通过enumerateGroupsWithTypes方法可以遍历所有的照片分组,再用分组的enumerateAssetsUsingBlock方法可以遍历该分组下所有的照片。
(4)通过valueForProperty获取到图片的信息,包括类型, Location , 时长,方向,日期,格式 , URL地址
2,下面做一个查看相册图片的APP
(1)程序启动后会加载相机胶卷里所有的照片,并以缩略图的形式展示出来
(2)点击缩略图,可以查看照片的原图以及图片的相关信息
3,效果图如下:
    
4,详细代码

--- 首页 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.
    }
}
5,源码下载:PhotoViewer.zip

Swift - 使用ALAssetsLibrary获取相簿里所有图片,视频(附样例)的更多相关文章

  1. Swift - 本地消息的推送通知(附样例)

    使用UILocalNotification可以很方便的实现消息的推送功能.我们可以设置这个消息的推送时间,推送内容等. 当推送时间一到,不管用户在桌面还是其他应用中,屏幕上方会都显示出推送消息. 1, ...

  2. Swift - 动画效果的实现方法总结(附样例)

    在iOS中,实现动画有两种方法.一个是统一的animateWithDuration,另一个是组合出现的beginAnimations和commitAnimations.这三个方法都是类方法. 一,使用 ...

  3. Swift - 反射(Reflection)的介绍与使用样例(附KVC介绍)

    1,反射(Reflection) 对于C#.Java开发人员来说,肯定都对反射这个概念相当熟悉.所谓反射就是可以动态获取类型.成员信息,同时在运行时(而非编译时)可以动态调用任意方法.属性等行为的特性 ...

  4. Android 开发 ContentProvider 获取歌曲列表和联系人的样例

    ContentProvider(内容提供者)是Android中的四大组件之中的一个. 主要用于对外共享数据.也就是通过ContentProvider把应用中的数据共享给其它应用訪问.其它应用能够通过C ...

  5. Swift - 数组排序方法(附样例)

    下面通过一个样例演示如何对数组元素进行排序.数组内为自定义用户对象,最终要实现按用户名排序,数据如下: 1 2 3 4 var userList = [UserInfo]() userList.app ...

  6. iOS获取本地沙盒视频封面图片(含swift实现)

    最近做了个小应用,有涉及到本地视频播放及列表显示. 其中一个知识点就是获取本地存储视频,用来界面中的封面显示. 记录如下: //videoURL:本地视频路径 time:用来控制视频播放的时间点图片截 ...

  7. iOS-使用ALAssetsLibrary获取相册图片视频

    用ALAssetsLibrary获取相册图片视频 ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; [library enumera ...

  8. iOS获取本地沙盒视频封面图片

    最近做了个小应用,有涉及到本地视频播放及列表显示. 其中一个知识点就是获取本地存储视频,用来界面中的封面显示. 记录如下: -(UIImage*) thumbnailImageForVideo:(NS ...

  9. 在html里添加视频的方法

    在html里添加本地视频的方法: <!DOCTYPE HTML><html><body><video width="320" height ...

随机推荐

  1. 兼容性问题( css)

    记录平时遇见的兼容性问题,有更好的解决办法希望各位提出,会持续更新 提出时间 问题描述 解决方案 2014/7/15 table下面使用img或者其他元素例如embed会产生,对应的空隙,假如使用文字 ...

  2. Linux下查看二进制文件命令

    一.在Linux下查看二进制文件的软件: xxd hexdump 二.编辑: 1.biew 2.hexedit 3.vim Vim 来编辑二进制文件.Vim 本非为此而设计的,因而有若干局限.但你能读 ...

  3. Best Component for Bitmap Image

    The best is to purchase ImageEn and use the latest version. Coz nothing compares to ImageEn.... But ...

  4. ASP.NET MVC 5 学习教程:添加视图

    原文 ASP.NET MVC 5 学习教程:添加视图 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 通过控 ...

  5. 基于visual Studio2013解决算法导论之021单向循环链表

     题目 单向循环链表的操作 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <time.h> ...

  6. Android PopupWindow显示位置和显示大小

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb3l1YW41MTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  7. [产值分析]生产部KPI考核之产值分析

    接到新任务:设计统计电子和磁电公司生产部产值分析报表. 眼下状况: 1.电子公司:取最新单位价格*入库数量 2.磁电公司:取最低价格*入库数量(实际取价的时候又没有取到最低价) 假设计算出来的结果和財 ...

  8. 另一种数据库连接字符串的编写方式(Sqlbuilder)

    SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(); builder.DataSource = "&q ...

  9. 嵌入式MCU开发群资源

     STM32CubeMX是一款图形化软件设置工具,允许使用图形化向导来生成C初始化代码.它是未来开发stm32系列产品的主流软件,是ST公司的主动原创,可以减轻开发工作,时间和费用.STM32Cube ...

  10. HTML 5与HTML 4的区别

    严重的拖延者患者,本来前天就打算写的,奈何拖到的今天才...(对拖延症有啥好的建议还望留言下,感激不尽...) 过完年了,跳槽蠢蠢欲动了,看些基础知识好应对面试,正好就整理整理... 正文开始 1.推 ...