首页
/ 3行代码搞定iOS图片分享:TZImagePickerController实战指南

3行代码搞定iOS图片分享:TZImagePickerController实战指南

2026-02-05 05:03:45作者:范靓好Udolf

你是否还在为iOS应用中的图片多选、预览和分享功能头疼?集成系统UIImagePickerController时是否遇到过功能单一、定制困难的问题?本文将带你3步实现微信级别的图片分享体验,从0到1掌握TZImagePickerController的高效集成方案。读完本文你将获得:

  • 3分钟快速集成多图选择功能
  • 完整的图片预览与原图发送实现
  • 自定义相册UI样式的核心技巧
  • 解决iOS18兼容性问题的最佳实践

一、认识TZImagePickerController

TZImagePickerController是一个功能完备的图片选择框架(Picker控制器),支持多选、原图、视频选择,同时包含预览、裁剪功能,最低支持iOS10+系统。相比系统原生的UIImagePickerController,它提供了更丰富的交互体验和自定义选项。

项目核心文件结构:

该框架已适配最新iOS18系统,解决了openURL失效问题,并通过隐私清单文件满足App Store审核要求。实际运行效果如下:

照片选择界面 照片预览界面

二、3步集成图片选择功能

1. 安装框架

推荐使用CocoaPods集成,在Podfile中添加:

pod 'TZImagePickerController'  # 完整版本
# 或仅集成基础功能(无定位代码)
# pod 'TZImagePickerController/Basic'

执行pod install完成安装,如需手动集成,将TZImagePickerController目录拖拽到项目中,并导入头文件:#import "TZImagePickerController.h"

2. 配置权限

在Info.plist中添加必要的权限声明:

<key>Privacy - Photo Library Usage Description</key>
<string>需要访问您的相册以选择图片</string>
<key>Privacy - Camera Usage Description</key>
<string>需要访问相机以拍摄照片</string>
<key>Privacy - Microphone Usage Description</key>
<string>需要访问麦克风以录制视频</string>

3. 实现核心代码

在需要调用图片选择器的ViewController中,添加以下代码:

// 导入头文件
#import "TZImagePickerController.h"

// 实现代理
@interface YourViewController () <TZImagePickerControllerDelegate>
@end

@implementation YourViewController

// 触发选择图片的按钮点击事件
- (IBAction)selectPhotosButtonClicked:(id)sender {
    // 创建图片选择器,最多选择9张图片
    TZImagePickerController *imagePickerVc = [[TZImagePickerController alloc] initWithMaxImagesCount:9 delegate:self];
    
    // 设置可选类型
    imagePickerVc.allowPickingVideo = YES;      // 允许选择视频
    imagePickerVc.allowPickingOriginalPhoto = YES; // 允许选择原图
    
    // 设置回调(也可通过代理方法实现)
    [imagePickerVc setDidFinishPickingPhotosHandle:^(NSArray<UIImage *> *photos, NSArray *assets, BOOL isSelectOriginalPhoto) {
        // 处理选择的图片
        [self handleSelectedPhotos:photos isOriginal:isSelectOriginalPhoto];
    }];
    
    //  present选择器
    [self presentViewController:imagePickerVc animated:YES completion:nil];
}

// 处理选择的图片
- (void)handleSelectedPhotos:(NSArray<UIImage *> *)photos isOriginal:(BOOL)isOriginal {
    // 1. 显示选中图片
    // 2. 准备分享数据
    // 3. 调用分享接口
}

@end

以上代码实现了基础的图片选择功能,如需更复杂的业务逻辑,可实现TZImagePickerControllerDelegate代理方法。

三、高级功能定制

1. 自定义选择行为

通过设置TZImagePickerController的属性,可定制选择行为:

// 设置最大视频拍摄时间(默认10分钟)
imagePickerVc.videoMaximumDuration = 60; // 1分钟

// 设置图片排序方式(默认按修改时间升序)
imagePickerVc.sortAscendingByModificationDate = NO; // 最新的在前

// 设置最小可选图片尺寸
imagePickerVc.minPhotoWidthSelectable = 800;
imagePickerVc.minPhotoHeightSelectable = 600;

// 单选模式下启用裁剪
imagePickerVc.allowCrop = YES;
imagePickerVc.cropRect = CGRectMake(0, 100, self.view.width, self.view.width); // 正方形裁剪框

2. 定制UI样式

通过UI配置block自定义界面元素:

// 自定义照片选择页底部工具栏
imagePickerVc.photoPickerPageUIConfigBlock = ^(UICollectionView *collectionView, UIView *bottomToolBar, UIButton *previewButton, UIButton *originalPhotoButton, UILabel *originalPhotoLabel, UIButton *doneButton, UIImageView *numberImageView, UILabel *numberLabel, UIView *divideLine) {
    // 修改完成按钮颜色
    doneButton.backgroundColor = [UIColor systemBlueColor];
    doneButton.layer.cornerRadius = 22;
    
    // 修改选中数字颜色
    numberLabel.textColor = [UIColor whiteColor];
};

// 设置导航栏样式
imagePickerVc.naviBgColor = [UIColor whiteColor];
imagePickerVc.naviTitleColor = [UIColor blackColor];
imagePickerVc.barItemTextColor = [UIColor systemBlueColor];

3. 多语言支持

框架内置多语言支持,可通过以下方式设置:

// 设置首选语言(支持zh-Hans、zh-Hant、en、vi等)
imagePickerVc.preferredLanguage = @"zh-Hans";

// 或使用系统语言
// imagePickerVc.preferredLanguage = nil;

语言资源文件位于TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle,包含阿拉伯语、德语、英语等多种语言。

四、常见问题解决方案

1. iOS14+权限适配

iOS14引入Limited Photos Access权限模式,用户可能只授权部分照片访问权限。框架会自动显示提示视图,引导用户授权完整访问权限,相关实现见TZImagePickerController/TZImagePickerController/TZAuthLimitedFooterTipView.h

2. 导航栏样式冲突

如项目中使用GKNavigationBarViewController等导航栏框架,可能导致导航栏消失,需升级到2.0.4+版本。如使用WRNavigationBar,需将TZImagePickerController加入黑名单:

[WRNavigationBarManager wr_setBlackList:@[@"TZImagePickerController", @"TZPhotoPreviewController"]];

3. 视频导出问题

部分安卓设备拍摄的视频可能导出失败,可通过设置禁用视频转向修正:

imagePickerVc.needFixComposition = NO; // 默认NO,不修正视频转向

五、源码仓库与资源

完整项目地址:https://gitcode.com/gh_mirrors/tz/TZImagePickerController

框架包含的核心模块:

官方文档:README.md

通过本文介绍的方法,你可以快速在iOS应用中集成专业级的图片选择与分享功能。该框架已在众多商业项目中验证,稳定性和兼容性均有保障,建议根据实际需求合理配置参数,以获得最佳用户体验。

登录后查看全文
热门项目推荐
相关项目推荐