如何写一个像UIImagePicker一样的自定义图片选择器
来源:互联网 发布:马云淘宝提成怎么算 编辑:程序博客网 时间:2024/06/10 05:00
UIImagePicker是一个简单并且快捷的从用户照片库中使用图片的类库,但是如何让用户在你的app中选择自定义图片呢?
然而UIImagePicker并没有任何功能能够实现让你显示自定义图片。不过在本教程中,我们会教会你创建自己的选择器,一个类似于UIImagePicker,并且也很容易使用的自定义图片选择器!
创建视图
基本思路是:我们有一个按钮“Choose Custom Image”,用户可以点击它,一旦轻按这个按钮,将会通过navigation控制器push一个新的view控制器显示图片。用户通过图像滚动方式浏览,并且点击喜欢的图片,就像UIImagePicker一样。
最简单的方式实现,就是在viewDidLoad方法上实现编码。我们将创建一个UIScrollView视图包含设置选择图片的UIButton网格内容。
让我们假设一下,我们有一个64×64大小的用于显示的缩略图数组和一个用于显示的全尺寸图片数组。在这种情况下,相关代码如下所示:
- (void)viewDidLoad { UIScrollView *view = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; int row = 0;int column = 0;for(int i = 0; i < _thumbs.count; ++i) { UIImage *thumb = [_thumbs objectAtIndex:i];UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];button.frame = CGRectMake(column*100+24, row*80+10, 64, 64);[button setImage:thumb forState:UIControlStateNormal];[button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];button.tag = i; [view addSubview:button]; if (column == 2) {column = 0;row++;} else {column++;} } [view setContentSize:CGSizeMake(320, (row+1) * 80 + 10)];self.view = view;[view release];[super viewDidLoad];}
代码很简单,不需要更多的解释,但有几件事需要指出
- 我设置按钮的tag字段为缩略图数据索引,方便后面代码识别。
- 别忘记最后调用UIScrollView中的setContentSize方式,让滚动视图设置正确的内容区域,否则会有无法实现滚动。
选择一个图片
由于我们使用按钮表示图像,当选择一个图片时,会得到一个按钮通知:
- (IBAction)buttonClicked:(id)sender {UIButton *button = (UIButton *)sender;UIImage *selectedImage = [_images objectAtIndex:button.tag];// Do something with image!}
图片大小
通常我们会让用户浏览图像缩略图,但选择图片后,将会使用全尺寸的图片。那么有什么好方法实现这个功能呢?以下有两种方式:
- 动态调整图片大小。在示例项目中有一个经常使用的辅助函数:imageByScalingAndCroppingForSize,不需要在项目中包括每个图片的缩略图(这可以节省空间)。但代价是如果你有很多图片需要调整大小,那么在设备上缩放图片会比较慢。
- 在项目中,添加每个图片的缩略图和全尺寸图。这样会多做一些工作,同时也需要有更多的空间。记住一件事,一旦你的app大小超过10M。那么购买app的用户就不能通过手机网络下载,他们必须通过Wi-Fi或者同步方式下载安装。这可能会影响销售。
查阅我的代码
这是一个有关上面讨论的代码例子,可以任意在自己的项目中使用。就我个人而言,已经在两个iPhone项目中使用它,这似乎是一个通用的需求。
- 如何写一个像UIImagePicker一样的自定义图片选择器
- 12306泄露查询 如何写一个像btgoogle一样的12306泄露数据查询
- 如何将文章写的像数学一样简洁完备
- 如何设计一个像人的大脑皮层一样的产品?
- 【codevs1425】最小的N个和,如何像煞笔一样地写堆
- c#的自定义控件中的属性像Items一样打开一个form的做法
- 像图片一样布局
- 像图片一样布局
- 做一个像狼一样的男人
- 程序员如何像写代码一样找女朋友
- 程序员如何像写代码一样找女朋友
- 程序员:如何像后端一样写前端代码?
- 富文本编辑器中如何让一个Div变成像输入框一样可输入的?
- 一步一步写一个图片选择器 (ing)
- 如何做到像《金山词霸》一样只运行一个实例
- 像写诗一样写代码
- 像说话一样写代码
- 像脚本语言一样写C++
- 常用英语词汇
- 腾讯资深产品经理谈敏捷开发于游戏
- 对xml文档的修改与删除
- N97锁屏
- vs2010 中使用 log4net
- 如何写一个像UIImagePicker一样的自定义图片选择器
- vc 获取当前模块基地址(HMODULE)
- 通用程序设计
- 淘宝Oceanbase云存储系统实践
- MapReduce Hold不住?
- kill-9死锁会话
- 影评《北京爱情故事》告诉我们一些事
- 钟楼商圈
- 20个Linux防火墙应用技巧