使用Three20写iPhone相册程序

刚开始学习iOS。其实连Mac电脑都是第一次摸……从第一天刚用Mac的时候完全不了解快捷键,连Ctrl C V 这种操作都练了好久才熟练。没有Home End什么的真心纠结,连Delete键都没有……我用的是那种蓝牙小键盘你懂的。

前几天看看书,熟悉熟悉环境,然后前辈给任务说做一个相册程序练练手。写了四天时间终于搞定了。一开始什么都不知道,比如ImagePicker和Three20什么的。后来尝试用ImagePicker实现,结果前辈表示不怎 么想让我用那种过于现成的方法……于是~~就开始学习Three20。好纠结,纠结了好久之后终于明白看Sample和源代码才是硬道理。

从开始使用320开始,遇到的问题都写一下好了。


1. Three20的配置。

  网上有很多这方面的内容,但感觉内容都差不多。我用的是直接敲命令的方式,屡战屡胜轻松愉快。建好了工程之后在终端输入

  python path/to/Three20/src/scripts/ttmodule.py -p path/to/project/project.xcodeproj Three20 --xcode-version=4

  这命令感觉上是跟xcode的版本有些相关的。不知道有没有大神更了解的。

  因为经常有些时候需要修改Three20的源代码,所以么最好是把Three20复制一份到自己的工程里面。

 

2. 模拟器运行时所在的目录

  既然要写一个相册,就要有图片才行。既然要有图片,就要想办法把图片放到程序目录里面去才行。iPhone的目录控制大家都懂,程序的ID所在的目录下面有个documents用来存放这种文件的。网上也容易查到这个路径,是 ~/Library/Application Support/iPhone Simulator/4.3/Applications/[app GUID]  。但是对于一个第一次用Mac的人,真心找不到这路径……后来纠结了半天,才明白~/Library 是个隐藏目录。要么在Finder中按住option键点“前往”,要么在命令行里面敲个命令  chflags nohidden ~/Library/

  

3. 根据Three20的Samples示例来写相册。

  网上这种教程还不少的(虽然感觉内容也差不多- =),看完了之后感觉还是自己看源码最实在。在samples的TTCatalog,里面的ThumbsView就是需要参考的示例。源文件部分要看的么基本就是AppDelegate(作为程序的入口,最清晰易懂)、MockPhotoSource(貌似是用来管理图片的- -最看不懂)和PhotoTest2Controller(用来对图片来源进行初始化等等,要说最重要么,或者说最需要动手术)。将这三个文件的功能提取出来放到自己的项目当中,就OK了。别忘了包含需要的Three20.h之类的。

  虽然这样做是很方便的,不过也是有很多问题的。主要是对图片来源进行初始化……那一大串[MockPhoto alloc]initWithURL …… 让谁看了都蛋疼的紧吧。其实还是有很多地方可以做得更好的。

 

4. 将图片来源从网址改为文件系统。

  网上也是很容易找到,只要把网址那个改成@"documents://......./a.jpg"之类的就行了。要注意的问题一是documents要小写而且别漏了s,二是…我不知道怎么能让它直接访问NSHomeDictionary目录。

  值得一讲的是,有可能你在运行的时候,即使运行正常了也会在图片中间显示一个Connection Error (我说的是运行正常,图片也能正常显示的情况)。这个问题我至今不知道是为什么,但把图片都放到程序的resources文件夹中,然后将URL改为@"bundle:// " ,确实可以解决这问题。更扯淡的是,我过了两天又运行了一次,@"documents:// "的,这次又正常了,后来也没再次出现这问题。如果有遇到同样情况的大虾,请把经验什么的分享一下,小弟感激不尽。

 

5. 既然一张一张初始化图片很麻烦

  我们用一个循环来让它自动初始化就好了。

  思路是这样:读取当前路径下的所有文件,然后筛出后缀为.jpg的,将它的路径格式化一下作为NSString,就可以放在initWithURL里面了。不过那样的话,我就没有直接在self.photoSource中一个一个init,而是先建一个NSMutableArray,之后在循环中对这NSMutableArray不断地addObject,将MockPhoto添加进去。添加的时候会自动将路径设为@"documents://"+当前目录+图片名 的形式,个人感觉是很方便的。

  把所有内容添加进NSMutableArray之后,作为参数传给self.photoSource的photos就行了

 

6. 你在想怎么才能筛出后缀为.jpg的文件么?

  按照“.”对文件名进行分割,然后取其最后一段,与@"jpg" 对比一下就行了。

  比如文件名是一个叫做content的NSString的话,那么只要

    NSArray *chunks = [content componentsSeparatedByString:@"."]; 

  就可以进行分割。之后再使用

    if ([[chunks objectAtIndex:[chunks count]-1] isEqualToString:@"jpg"] )

  就可以筛选出来后缀为.jpg的文件了。

 

7. 但你一定还在想MockPhoto初始化时要手动输入size也很麻烦。

  那么我们就用程序自动读取图片的高和宽,自动传进去就行了。使用UIImage类可以完美做到这点。传入参数就是CGSizeMake(img.size.width,img.size.height); 轻松愉快。

 

------------- -------------

最后我写出来的是个这样的程序:

  建一个基于导航的项目

  有RootViewController、PhotoAppDelegate、PhotoViewController和MockPhotoSource。

  手写一下RootViewController,用于显示指定目录中的所有相册。点击任意相册就进入PhotoViewController。

  剩下的三个分别对应Three20那个TTCatalog示例中的AppDelegate、PhotoTest2Controller、MockPhotoSource

 

  有很多功能我并没有实现。

           1. 应该自定义rootView中的Cell,使其能够显示相册中的某一张图片。并显示相册中的图片数目。而不是只显示下级相册的名称

           2. 如果相册内还有相册的话应该如何进行显示呢?

           3. 图片显示到最后一张的时候如何能够自动循环到第一张。

           4. 边栏目前只能在点击的时候隐藏,如何能够使其过两秒自动隐藏?

           5. 显示图片缩略图的时候,应该在最下部显示该目录的相片数……吧。

     6. 幻灯片播放功能,320应该有实现才对吧,回头继续翻源码。

-------------------------------

以上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值