新浪微博客户端(39)-从图库或相机中选择图片
DJComposeViewController.m
#pragma mark - DJComposeToolbar 代理方法 - (void)composeToolbar:(DJComposeToolbar *)toolbar didClickBtnType:(DJComposeToolbarBtnType)btnType { switch (btnType) { case DJComposeToolbarBtnTypeCamera: [self openCameraSurface]; break; case DJComposeToolbarBtnTypePicture: [self openPhotoLibrary]; break; case DJComposeToolbarBtnTypeMention: DJLog(@"@"); break; case DJComposeToolbarBtnTypeTrend: DJLog(@"#"); break; case DJComposeToolbarBtnTypeEmotion: DJLog(@"Emoji"); break; default: break; } } #pragma mark - UIImagePickerController 代理方法 /** 当用户拍照完成或从图库中选择完毕后调用此方法 */ - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)intent { // NSLog(@"%@",intent); UIImage *image = intent[UIImagePickerControllerOriginalImage]; [self.photosView addPhoto:image]; [picker dismissViewControllerAnimated:YES completion:nil]; } - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { DJLog(@"用户取消了选择"); [picker dismissViewControllerAnimated:YES completion:nil]; } #pragma mark - 打开相机拍摄界面或相机图库 /** 打开相机图库 */ - (void)openPhotoLibrary { // 首先判断当前图库选项是否可用 if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) { UIImagePickerController *ipc = [[UIImagePickerController alloc] init]; ipc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; ipc.delegate = self; [self presentViewController:ipc animated:YES completion:nil]; } } - (void)openCameraSurface { // 判断当前相机系统是否可用 if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { UIImagePickerController *ipc = [[UIImagePickerController alloc] init]; ipc.sourceType = UIImagePickerControllerSourceTypeCamera; [self presentViewController:ipc animated:YES completion:nil]; } } - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; }
DJComposePhotosView.h
#import <UIKit/UIKit.h> // 相册的最大列数 #define DJComposePhotosViewMaxColumns 3 // 相册中的图片间距 #define DJComposePhotosViewMargin 4 // 相册图片的宽高 #define DJComposePhotoWH ((DJContentWidth - (DJComposePhotosViewMaxColumns - 1) * DJComposePhotosViewMargin) / DJComposePhotosViewMaxColumns) // 相册的高度(最多9张图片) #define DJComposePhotosViewH (DJComposePhotoWH * DJComposePhotosViewMaxColumns + DJComposePhotosViewMargin * 2) @interface DJComposePhotosView : UIView - (void)addPhoto:(UIImage *)photo; @end
DJComposePhotosView.m
#import "DJComposePhotosView.h" @implementation DJComposePhotosView // 每添加一个UIImage,就把它当做一个imageView 添加到photsView中 - (void)addPhoto:(UIImage *)photo { UIImageView *imageView = [[UIImageView alloc] init]; imageView.image = photo; imageView.contentMode = UIViewContentModeScaleAspectFill; imageView.clipsToBounds = YES; [self addSubview:imageView]; } - (void)layoutSubviews { [super layoutSubviews]; NSUInteger count = self.subviews.count; for (int i = 0; i < count; i++) { UIImageView *imageView = self.subviews[i]; imageView.width = DJComposePhotoWH; imageView.height = DJComposePhotoWH; int cols = i % DJComposePhotosViewMaxColumns; imageView.x = cols * (DJComposePhotoWH + DJComposePhotosViewMargin); int rows = i / DJComposePhotosViewMaxColumns; imageView.y = rows * (DJComposePhotoWH + DJComposePhotosViewMargin); } } @end
最终效果:
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库