,,iOS仿微信图片分享界面实现代码

,,iOS仿微信图片分享界面实现代码

这篇文章主要为大家详细介绍了ios仿微信相册界面翻转过渡动画效果,微信采用界面翻转的过渡动画跳转到评论界面,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

分享功能目前几乎已成为很多应用的标配了,其中微信,微博等应用的图片分享界面设计的很棒,不仅能够展示缩略图,还可以预览删除。最近我在做一款社交分享app,其中就要实现图文分享功能,于是试着自行实现仿微信分享风格的功能。

核心思想:

主要是使用UICollectionView来动态加载分享图片内容,配合预览页面,实现动态添加和预览删除图片效果。

实现效果:

核心代码如下:

分享界面:

//

//

PostTableViewController.h

//

九股

//

//

由…创造张昌伟26年一月15日。

//

版权2015年年9工作室。保留所有权利。

//

#导入

UIKit/UIKit.h

#导入

UMSocial.h '

#导入

YSYPreviewViewController.h '

@ interface postgableviewcontroller

:UITableViewControllerUITextViewDelegate、UICollectionViewDataSource、UICollectionViewDelegate、UIActionSheetDelegate、UIImagePickerControllerDelegate、UMSocialUIDelegate、UINavigationControllerDelegate

@属性(弱,

非原子)

IBOutlet UICollectionView

*照片集合视图

@属性(弱,

非原子)

IBOutlet UISwitch

*微博开关;

@属性(弱,

非原子)

IBOutlet UISwitch

*人人开关

-

(我行动)豆瓣切换:(id)发件人;

-

(I动作)人人网切换:(id)发件人;

-

(我行动)微博切换:(id)发件人;

(无效)

deleteSelectedImage:(NSInteger)

指数;

(无效)

deleteSelectedImageWithImage:(ui image *)image;

@end

实现文件

//

//

PostTableViewController.m

//

九股

//

//

由…创造张昌伟26年一月15日。

//

版权2015年年9工作室。保留所有权利。

//

#导入

PostTableViewController.h '

#导入

NineShareService.h '

静态NSMutableArray * currentImages

@ interface postgableviewcontroller

()

@属性(弱,

非原子)

IBOutlet UITextView

*共享内容;

-

(I操作)发布状态:(id)发件人;

-

(I操作)取消发布:(id)发件人;

-(无效)

负载状态

@属性(弱,

非原子)

IBOutlet UISwitch

*双重开关

@属性(弱,

非原子)

IBOutlet UITextView

*背景文本视图

@ property NSMutableArray * SNS array;

//@属性

NSMutableArray *照片;

@property NineShareService

*数据上下文;

@ property NSMutableDictionary * tempDict;

-(无效)

开放式摄像机

-(无效)

开放图书馆;

@end

@实现PostTableViewController

-

(void)viewDidLoad

{

【超级viewDidLoad】;

如果(当前图像

==零)

{

当前图像=[[NSMutableArray alloc]

init];

}

//

取消对下面一行的注释,以保留演示文稿之间的选择。

//

自我。clearsselectionviewwillappear=NO;

//

取消对以下行的注释,以在导航栏中显示此视图控制器的编辑按钮。

//

自我。导航项目。rightbarbuttonitem=self。editbuttonitem

_dataContext=[NineShareService

getInstance];

[自加载状态];

}

-(void)viewWillAppear:(BOOL)动画{

[_photosCollectionView

重新加载数据];

}

-

(void)didReceiveMemoryWarning

{

【超级didReceiveMemoryWarning】;

//

处置任何可以重新创建的资源。

}

-(无效)

loadSNSStatus{

_ SNS array=[NSMutableArray arraywithcontentsofile:[[ns bundle主捆绑包]

资源的路径:@ ' SNS '类型:@ ' plist ']];

if(_snsArray.count0)

{

[_微博开关

setOn:[_ SNS array[0]boolValue]animated:YES];

[_RenrenSwitch

setOn:[_ SNS array[1]boolValue]animated:YES];

[_DoubanSwitch

setOn:[_ SNS array[2]boolValue]animated:YES];

}

}

-(BOOL)textView:(UITextView

*)textView shouldChangeTextInRange:(ns range)range

替换文本:(ns字符串*)文本{

如果(![正文

isEqualToString:@''])

{

[_backgroundTextView

setHidden:是];

}

如果([文本

isEqualToString:@ ' ']范围。长度==1范围。location==0){

[_backgroundTextView

设置隐藏:否];

}

如果([文本

isEqualToString:@'\n'])

{

[文本视图

resignfirstpresponder];

返回否;

}

返回是

}

-(void)textViewDidBeginEditing:(UITextView

*)文本视图

{

CGRect

框架=文本视图.框架

(同Internationalorganizations)国际组织偏移

=框架。起源。y 32-(自己。查看。框架。尺寸。高度

- 216.0);//键盘高度216

NSTimeInterval动画持续时间

=0.30f

[UIView

开始动画:@ ' ResizeForKeyboard ' context:nil];

[UIView

setAnimationDuration:动画时长];

//将视图的Y坐标向上移动抵消个单位,以使下面腾出地方用于软键盘的显示

如果(偏移

0)

自我视图。框架

=CGRectMake(0.0f,-offset,self.view.frame.size.width,

自我。查看。框架。尺寸。身高);

[UIView

承诺];

}

-(void)textViewDidEndEditing:(UITextView

*)文本视图{

自我视图。框架

=CGRectMake(0,0,self.view.frame.size.width,

自我。查看。框架。尺寸。身高);

}

-(void)集合视图:(UICollectionView

*)集合视图didSelectItemAtIndexPath:(NSIndexPath *)索引路径{

if(索引路径。row==当前图像。计数)

{

UIActionSheet

* action=[[UIActionSheet alloc]init with title:@ '选取照片代理人:自行取消按钮标题:@ '取消破坏性按钮标题:无其他按钮标题:@ '从摄像头选取,

@'从图片库选择,nil];

[行动

在视图中显示:自己。查看];

}

其他

{

[YSYPreviewViewController

setprevieimage:当前图像[索引路径。row]];

[自助导航控制器

pushview控制器:[[UIStoryboard storyboardWithName:@ ' Main ' bundle:[ns bundle Main bundle]]

instantiateViewControllerWithIdentifier:@ '预览VC ']

动画:是];

}

}

-(n integer)集合视图:(UICollectionView

*)集合视图numberOfItemsInSection:(NSInteger)section {

return currentImages.count==0?1:当前图像。计数1;

}

-(UICollectionViewCell

*)集合视图:(UICollectionView *)集合视图cellForItemAtIndexPath:(NSIndexPath *)索引路径{

UICollectionViewCell

* cell=[集合视图dequereusablecellwithreuseidentifier:@ '集合单元'用于索引路径:索引路径];

UIImageView

* imageView=[[UIImageView alloc]initWithFrame:CGRectMake(0,0,50,50)];

如果(当前图像。计数==0 | |索引路径。row==当前图像。计数)

{

imageView.image=[UIImage

图像名为:@ ' Add '];

}

否则{

而([单元格。内容视图。子视图

lastObject]!=零)

{

[(ui视图*)[单元格。内容视图。子视图

最后一个对象]removeFromSuperview];

}

imageview。image=当前图像[索引路径。row];

}

imageview。content mode=uiviewcontentmodescalaspectfill;

[cell.contentView

添加子视图:imageView];

返回单元格;

}

-(void)saveSNSToFile{

ns string * dest path=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,

NSUserDomainMask,

是)

最后一个对象];

如果(![[NSFileManager默认管理器]

filexistsatpath:destPath]){

ns字符串*路径=[[ns包主包]

资源的路径:@ ' SNS '类型:@ ' plist '];

[[NSFileManager默认管理器]

copyItemAtPath:路径到路径:目标路径错误:无];

}

if(_snsArray==nil)

_ SNS array=[[NSMutableArray alloc]

init];

[_snsArray

删除所有对象];

[_snsArray

addObject:_WeiboSwitch.isOn?@ '是':@ '否'];

[_snsArray

addObject:_RenrenSwitch.isOn?@ '是':@ '否'];

[_snsArray

addObject:_DoubanSwitch.isOn?@ '是':@ '否'];

if(_snsArray.count0)

{

[_snsArray

自动写入文件:目标路径:是];

}

}

-

(I操作)发布状态:(id)发件人

{

if(_WeiboSwitch.isOn)

[[UMSocialDataService

defaultDataService]postSNSWithTypes:@[UMShareToSina]content:_ share content。文字。长度0?_shareContent.text: @'9Share

对于ios测试消息image:currentImages.count==0?nil:currentImages[0]

位置:空统一资源定位器资源:空已呈现控制器:自身completion:^(umsocialresponseentity

*响应){

if (response.responseCode

==umsresponsecodescess){

NSLog(@ '分享成功!');

如果(!(_人人开关。ison | | _ doubanswitch。ison))

{

[self saveSNSToFile];

[self dismissViewControllerAnimated:是完成:无];

}

}

}];

if(_RenrenSwitch.isOn)

[[UMSocialDataService

defaultDataService]postSNSWithTypes:@[UMShareToRenren]content:_ share content。文字。长度0?_shareContent.text: @'9Share

对于ios测试消息image:currentImages.count==0?nil:currentImages[0]

位置:空统一资源定位器资源:空已呈现控制器:自身completion:^(umsocialresponseentity

*响应){

if (response.responseCode

==umsresponsecodescess){

NSLog(@ '分享成功!');

如果(!_DoubanSwitch.isOn)

{

[self saveSNSToFile];

[self dismissViewControllerAnimated:是完成:无];

}

}

}];

if(_DoubanSwitch.isOn)

[[UMSocialDataService

defaultDataService]postSNSWithTypes:@[UMShareToDouban]content:_ share content。文字。长度0?_shareContent.text: @'9Share

对于ios测试消息image:currentImages.count==0?nil:currentImages[0]

位置:空统一资源定位器资源:空已呈现控制器:自身completion:^(umsocialresponseentity

*响应){

if (response.responseCode

==umsresponsecodescess){

NSLog(@ '分享成功!');

[self saveSNSToFile];

[self dismissViewControllerAnimated:是完成:无];

}

}];

}

-(void)图像拾取器控制器:(UIImagePickerController

*)选取器已完成pickingdediwithinfo:(ns字典*)信息{

[提货人

dismissViewControllerAnimated:是完成:无];

UIImage

* image=[info objectForKey:UIImagePickerControllerOriginalImage];

ns data * tempData=UIImageJPEGRepresentation(image,

0.5f);

image=[UIImage

imageWithData:tempData];

如果(当前图像

==零)

{

当前图像=[[NSMutableArray alloc]

init];

}

[当前图像

添加对象:图像];

[_photosCollectionView

重新加载数据];

//

[自我保存图像:名称为@ ' ' '的图像]

}

-(void)imagepickercontrollerdiccancel:(UIImagePickerController

*)选取器{

[提货人

dismissViewControllerAnimated:是完成:无];

}

-

(IBAction)取消发布:(id)发件人

{

[self dismissViewControllerAnimated:是完成:无];

}

-(void)动作表:(UIActionSheet

*)操作表clickedButtonAtIndex:(n整数)按钮索引{

开关(按钮索引)

{

案例0:

【自开相机】;

打破;

案例1:

[自我开放库];

打破;

默认值:

打破;

}

}

-(void)openCamera{

//UIImagePickerControllerSourceType

* type=UIImagePickerControllerSourceTypeCamera;

if([UIImagePickerController

isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])

{

UIImagePickerController

* picker=[[UIImagePickerController alloc]init];

picker.delegate=自我

提货人。source type=UIImagePickerControllerSourceTypeCamera;

picker.allowsEditing=是

[自我演示视图控制器:选取器

动画:是完成:无];

}

}

-(无效)开放库{

if([UIImagePickerController

isSourceTypeAvailable:uiimagepickercontrollersourcetyphotolibrary])

{

UIImagePickerController

* picker=[[UIImagePickerController alloc]init];

picker.delegate=自我

提货人。source type=uiimagepickercontrollersourcetyphotolibrary;

picker.allowsEditing=是

[自我演示视图控制器:选取器

动画:是完成:无];

}

}

-(无效)

保存图像:(ui image *)带有名称的图像:(ns string *)名称

{

ns data * imageData=UIImageJPEGRepresentation(image,

0.5);

ns string * path=[n临时目录()

stringByAppendingPathComponent:name];

[图像数据

自动写入文件:路径:是];

}

-

(我行动)豆瓣切换:(id)发件人

{

if(_DoubanSwitch.isOn){

如果(![UMSocialAccountManager

isOauthAndTokenNotExpired:UMShareToDouban])

{

//进入授权页面

[UMSocialSnsPlatformManager

getSocialPlatformWithName:UMShareToDouban】。log in click handler(self,[UMSocialControllerService

defaultcontrollerservice],yes,^(umsocialresponseentity

*响应){

if (response.responseCode

==umsresponsecodescess){

//获取微博用户名、uid、令牌等

UMSocialAccountEntity

* SNS count=[[UMSocialAccountManager socialaccoundictionary]valueForKey:UMShareToDouban];

NSLog(@ '用户名

是%@,uid是%@,令牌是“%@”、snsAccount.userName、snsAccount.usid、SNS count。访问令牌);

//进入你的分享内容编辑页面

UMSocialAccountEntity

* doubanAccount=[[UMSocialAccountEntity alloc]initWithPlatformName:UMShareToDouban];

doubanAccount.usid

=snsAccount.usid

doubanAccount.accessToken

=SNS计数。访问令牌;

//

weiboAccount.openId=@ '腾讯微博openId ';//腾讯微博账户必需设置openId

//同步用户信息

[UMSocialAccountManager

postsnsaccount:doubanaccount completion:^(umsocialresponseentity * response){

if (response.responseCode

==umsresponsecodescess){

//在本地缓存设置得到的账户信息

[UMSocialAccountManager

setSnsAccount:doubanAccount];

//进入你自定义的分享内容编辑页面或者使用我们的内容编辑页面

}}];

}

否则{

[_DoubanSwitch

西顿:无动画:有];

}

});

}

}

}

-

(IBAction)人人切换:(id)发件人

{

if(_DoubanSwitch.isOn)

{

如果(![UMSocialAccountManager

isOauthAndTokenNotExpired:UMShareToRenren])

{

//进入授权页面

[UMSocialSnsPlatformManager

getSocialPlatformWithName:UMShareToRenren 】. log in click handler(self,[UMSocialControllerService

defaultcontrollerservice],yes,^(umsocialresponseentity

*响应){

if (response.responseCode

==umsresponsecodescess){

//获取微博用户名、uid、令牌等

UMSocialAccountEntity

* SNS count=[[UMSocialAccountManager socialaccoundictionary]valueForKey:UMShareToRenren];

NSLog(@ '用户名

是%@,uid是%@,令牌是“%@”、snsAccount.userName、snsAccount.usid、SNS count。访问令牌);

//进入你的分享内容编辑页面

UMSocialAccountEntity

* renrenAccount=[[UMSocialAccountEntity alloc]initWithPlatformName:UMShareToRenren];

renrenAccount.usid

=snsAccount.usid

renrenAccount.accessToken

=SNS计数。访问令牌;

//

weiboAccount.openId=@ '腾讯微博openId ';//腾讯微博账户必需设置openId

//同步用户信息

[UMSocialAccountManager

postsnsaccount:renrenaccount completion:^(umsocialresponseentity * response){

if (response.responseCode

==umsresponsecodescess){

//在本地缓存设置得到的账户信息

[UMSocialAccountManager

setSnsAccount:人人账户];

//进入你自定义的分享内容编辑页面或者使用我们的内容编辑页面

}}];

}

否则{

[_RenrenSwitch

西顿:无动画:有];

}

});

}

}

}

-

(IBAction)微博切换:(id)发件人

{

if(_WeiboSwitch.isOn)

{

如果(![UMSocialAccountManager

isOauthAndTokenNotExpired:UMShareToSina])

{

[UMSocialSnsPlatformManager

getSocialPlatformWithName:UMShareToSina】。log in click handler(self,[UMSocialControllerService

defaultcontrollerservice],yes,^(umsocialresponseentity

*响应){

如果(回应。响应代码==umsresponsecodescess){

UMSocialAccountEntity

* SNS count=[[UMSocialAccountManager socialaccoundictionary]valueForKey:UMShareToSina];

UMSocialAccountEntity

*新浪账号=[[UMSocialAccountEntity alloc]initWithPlatformName:UMShareToSina];

//缓存到本地

sinaAccount.usid

=snsAccount.usid

新浪账户

=SNS计数。访问令牌;

//

weiboAccount.openId=@ '腾讯微博openId ';//腾讯微博账户必需设置openId

//同步用户信息

[UMSocialAccountManager

帖子SNS账号:新浪账号completion:^(umsocialresponseentity *响应){

if (response.responseCode

==umsresponsecodescess){

//在本地缓存设置得到的账户信息

[UMSocialAccountManager

setSnsAccount:新浪账号];

//进入你自定义的分享内容编辑页面或者使用我们的内容编辑页面

}}];

}

其他

{

[_微博开关

西顿:无动画:有];

}

});

}

}

}

(void)deleteSelectedImage:(NSInteger)索引

{

if(currentImages!=零)

[当前图像

removeObjectAtIndex:index];

}

(void)deleteSelectedImageWithImage:(ui图像

*)图像{

if(currentImages!=零)

[当前图像

移除对象:图像];

}

@end

预览界面:

//

//YSYPreviewViewController.h

//九分之一

//

//15/2/1由张昌伟创作。

//版权所有2015年年9工作室。保留所有权利。

//

#导入UIKit/UIKit.h

# import ' postgableviewcontroller。' h '

@ interface YSYPreviewViewController:uiviewcontrolleruiactionsheetdelegate

(void)setprevieimage:(ui image *)image;

@end

//

//YSYPreviewViewController.m

//九分之一

//

//15/2/1由张昌伟创作。

//版权所有2015年年9工作室。保留所有权利。

//

# import ' ysypreviewviewcontroller。' h '

静态UIImage * currentImage

@ interface YSYPreviewViewController()

-(I操作)deleteSelectedImage:(id)发件人;

@property(弱,非原子)IBOutlet ui imageview *预览图片视图;

@end

@ implementation YSYPreviewViewController

- (void)viewDidLoad {

【超级viewDidLoad】;

//在加载视图后进行任何附加设置。

_ previewimageview。image=当前图像;

}

-(void)didReceiveMemoryWarning {

【超级didReceiveMemoryWarning】;

//释放任何可以重新创建的资源。

}

/*

#杂注标记-导航

//在基于故事板的应用程序中,您通常会希望在导航之前做一些准备

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

//使用[后续目的地视图控制器]获取新的视图控制器。

//将选定的对象传递给新的视图控制器。

}

*/

-(I操作)deleteSelectedImage:(id)发件人{

UIActionSheet * action=[[UIActionSheet alloc]init with title:@ '要删除这张照片吗?'代理人:自行取消按钮标题:@ '取消破坏性按钮标题:@ '删除otherButtonTitles:nil];

[操作显示视图:自我。查看];

}

-(void)动作表:(UIActionSheet *)点击的动作表按钮索引:(n整数)按钮索引{

if(按钮索引==动作表。取消按钮索引)

{

返回;

}

其他

{

[postgableviewcontroller deleteSelectedImageWithImage:当前图像];

【自我。导航控制器popToRootViewControllerAnimated:YES];

}

}

(void)setprevieimage:(ui image *)image {

currentImage=图像

}

@end

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 微信读书做笔记主页有显示吗,微信读书做笔记赚钱
  • 微信如何建群详细步骤,怎么建群微信怎么建群呢
  • 微信拍一拍怎么拍肩膀好看,微信如何拍一拍肩膀
  • 微信如何转发给qq,怎么从QQ转发到微信
  • 微信表情含义图解大全2022吃西瓜,微信表情含义图解大全2020高清
  • 微信网页版文件传输助手的文件在哪里,微信文件传输助手怎么批量保存
  • ,,详解微信小程序开发之formId使用(模板消息)
  • ,,最详细的ASP.NET微信JS-SDK支付代码
  • ,,微信小程序视图容器(swiper)组件创建轮播图
  • ,,微信小程序自定义toast弹窗效果的实现代码
  • ,,微信小程序的WXSS和全局、页面配置详细讲解
  • ,,微信小程序左右滚动公告栏效果代码实例
  • ,,微信小程序实现简易table表格
  • ,,微信小程序实现二维码签到考勤系统
  • ,,微信小程序中wxs文件的一些妙用分享
  • 留言与评论(共有 条评论)
       
    验证码: