千锋ios

更新时间:2022-12-26 15:49:54 阅读: 评论:0


2022年12月26日发(作者:天津理财规划师培训)

/

北京千锋互联科技有限公司版权所有

北京iOS开发教程iOS自定义多选相册简单实现

在实际开发中,程序猿经常需要实现从手机本地相册一次性获取多张图片的需求,例如

社交软件中发布状态时,从本地相册选取多张图片发布。提到从手机本地获取图片,首先想

到的是iOS系统提供的UIImagePickerController控件。UIImagePickerController以模态

视图的形式将本地相册中的照片显示出来,封装度高,实现简单,但是很难满足实际多样性

的相册功能需求。本文将针对如何实现一个iOS自定义多选相册给出一些参考,希望能对

iOS初学者有所帮助。

查阅网上的现有资料,笔者发现功能的实现还是比较容易的。但是对于很多iOS初学者

来说,成熟的第三方库最大的问题是代码封装度比较高,缺少一些适当的注释,难以理解和

自行修改,另外,一些第三方的代码过于陈旧,MRC的内存管理机制对于现在的很多初学者

都非常陌生。一下,我们以代码片段展示的形式来对功能的实现做分解。

1、如果获取到手机本地的所有相册?

1)需要的支持框架:#import

在实现显示手机本地的所有相册的控制器中,导入该系统框架。该框架主要支持本地相

册的读取以及相册图片的读取。

2)需要的类:ALAstsLibrary

在控制器中声明一个ALAstsLibrary类的属性,该属性专用于获取手机本地所有的相

册资源。

3)使用UITableView控件示相册,一个cell展示一个相册,点击cell跳转到下一界

面展示相册内的图片。注意,需要将选中的ALAstsGroup对象(一个对象代表了一个相册)

传入下一个界面。

主要代码如下:

获取本地相册资源:

#pragmamark--获取本地相册

-(void)getDataSource{

/

北京千锋互联科技有限公司版权所有

//1.数据源数据初始化

if(!_dataSource){

_dataSource=[NSMutableArrayarray];

}

//2.图片访问类对象初始化

if(!_astsLibrary){

_astsLibrary=[[ALAstsLibraryalloc]init];

}

//3.相册获取

dispatch_async(dispatch_get_main_queue(),

^{[_astsLibraryenumerateGroupsWithTypes:ALAstsGroupAllusingBlock:^(

ALAstsGroup*group,BOOL*stop){

//如果获取的相册不为空

if(group){

//添加数据

[urceaddObject:group];

//主线程刷新UI

[lfperformSelectorOnMainThread:@lector(reloadTableView)

withObject:nilwaitUntilDone:YES];

}

}failureBlock:^(NSError*error){

NSLog(@"Groupnotfound!n");

//提示错误

/

北京千锋互联科技有限公司版权所有

}];

})

}

将相册展示在cell上:

#pragmamark--cell的展示

-(UITableViewCell*)tableView:(UITableView*)tableView

cellForRowAtIndexPath:(NSIndexPath*)indexPath{

staticNSString*cellID=@"AlbumGroupCell";

UITableViewCell*cell=[tableViewdequeueReusableCellWithIdentifier:cellID];

if(!cell){

cell=

[[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuIdentifier

:cellID];

}

//获取相册图片数

ALAstsGroup*group=

(ALAstsGroup*)[urceobjectAtIndex:];

[grouptAstsFilter:[ALAstsFilterallPhotos]];

NSIntegergroupCount=[groupnumberOfAsts];

//相册来源

NSString*groupName=[groupvalueForProperty:ALAstsGroupPropertyName];

if([groupNameisEqualToString:@"CameraRoll"]){

/

北京千锋互联科技有限公司版权所有

groupName=@"相机胶卷";

}elif([groupNameisEqualToString:@"MyPhotoStream"]){

groupName=@"我的照片流";

}

=[NSStringstringWithFormat:@"%@(%ld)",groupName,

groupCount];

//显示图片张数

[iewtImage:[UIImageimageWithCGImage:[(ALAstsGroup*)[u

rceobjectAtIndex:]posterImage]]];

//显示第一张图片

[celltAccessoryType:UITableViewCellAccessoryDisclosureIndicator];

//显示cell右侧小箭头

returncell;

}

实现的效果如下:

/

北京千锋互联科技有限公司版权所有

1.如何获取到相册中的所有图片?

1)需要的支持框架:#import

2)需要的类:ALAstsLibrary、ALAstsGroup

在控制器中声明一个ALAstsLibrary类的属性,该属性专用于获取手机本地所有

的相册资源。声明一个ALAstsGroup类的属性,用于接收上个界面选中的相册资源。

3)自定义一个数据模型类用于ALAst对象(一个对象代表一张图片)以及图片状态

的封装。

4)使用UICollectionView控件展示相册所有图片。

主要代码如下:

获取相册中的所有图片:

#pragmamark--加载相册图片

-(void)loadData{

/

北京千锋互联科技有限公司版权所有

if(!_dataSource){

_dataSource=[NSMutableArrayarray];

}

if(!_lectedAstsGroup){

_lectedAstsGroup=[NSMutableArrayarray];

}

[_astsGroupenumerateAstsUsingBlock:^(ALAst*result,NSUInteger

index,BOOL*stop){

if(result){

ELNALAst*ast=[[ELNALAstalloc]init];

=result;

cted=NO;

[_dataSourceaddObject:ast];

}

}];

[_collectionViewreloadData];

}

数据模型类的封装:

#import

#import

@interfaceELNALAst:NSObject

/

北京千锋互联科技有限公司版权所有

@property(nonatomic,strong)ALAst*ast;

@property(nonatomic,assign)BOOLisSelected;

@end

实现效果如下:

1.如何实现图片的多选功能?

该功能的实现需要注意的地方有两点:

1)需要设置UICollectionView可多选:

/

北京千锋互联科技有限公司版权所有

_MultipleSelection=YES;

//设置支持复选

1.同一个cell第一次点击选中,第二次点击取消选中,非常值得注意的是,在cell的选

中状态发生改变时,要同步修改数据源中数据模型的相关属性,避免cell的复用时发生错乱,

另外,修改数据的代码应该是在collectionView选中和替选方法中触发,而不是在自定义

cell中tSelected方法触发。

(选中与非选中状态是通过cell上是否显示选中的对勾图片区分的)

#pragmamark--collectionViewdelegate

//选中

-(void)collectionView:(UICollectionView*)collectionView

didSelectItemAtIndexPath:(NSIndexPath*)indexPath{

//调用方法修改cell的选中状态

[lfchangeCellWithIndexPath:indexPath];

}

//替选

-(void)collectionView:(UICollectionView*)collectionView

didDelectItemAtIndexPath:(NSIndexPath*)indexPath{

//调用方法修改cell的选中状态

[lfchangeCellWithIndexPath:indexPath];

}

#pragmamark--修改cell的状态

-(void)changeCellWithIndexPath:(NSIndexPath*)indexPath{

//1.通过indexPath获取到数据源中的模型对象,修改对象中修改状态

/

北京千锋互联科技有限公司版权所有

ELNALAst*ast=_dataSource[];

cted^=1;

[_dataSourcereplaceObjectAtIndex:hObject:ast];

//2.将数据模型添加或者移除

//如果选中将数据模型加入选中的数组

if(cted){

[edAstsGroupaddObject:ast];

}el{

//如果取消选中将数据模型从选中数组中移除

[edAstsGroupremoveObject:ast];

}

//3,修改cell上显示的选中图片的显示状态

ELNPickerCell*cell=(ELNPickerCell

*)[_collectionViewcellForItemAtIndexPath:indexPath];

[cellchangeSelectedWithALAst:ast];

}

实现的效果如下:

/

北京千锋互联科技有限公司版权所有

以上就是对于iOS自定义多选相册的简单实现,希望能给读者带来一些帮助。

本文发布于:2022-12-26 15:49:54,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/34563.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:国学培训
标签:千锋ios
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图