swift 调用第三方图片库TZImagePickerController
今天发现用swift调用TZImagePickerController的时候block传入参数没有自动提示,手动输入全错了。用oc可以方便的调用TZImagePickerController。所以下面代码是用oc封装一个可以被swift方便调用的类方法,可以完美使用swift调用这个库
安装库
podfile里面的内容:
pod ‘TZImagePickerController’
然后执行pod install
桥接文件中的内容
//TZImagePickerControllerDemo-Bridging-Header.h
#import "TZImagePickerController.h"
#import "setTzOc.h"
oc的调用方法
这里只写基本用法,直接把选取的图片或者照片添加到一个UIImageView中,不添加到collectionView中
//
// ViewController.m
// TZImagePickerControllerDemo
//
// Created by tdw on 2020/12/8.
//
#import "TZImagePickerController.h"
#import "TZImagePickerControllerDemo-Swift.h"
#import "ViewController.h"
@interface ViewController (){
}
@property (weak, nonatomic) IBOutlet UIImageView *imageV1;
@property (strong,nonatomic)TZImagePickerController* imagePickerVc;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[self setTzVc];
}
-(void)setTzVc{
self.imagePickerVc = [[TZImagePickerController alloc] initWithMaxImagesCount:9 columnNumber:4 delegate:self];
self.imagePickerVc.maxImagesCount = 9;
__weak typeof(self) weakSelf = self;
[self.imagePickerVc setDidFinishPickingPhotosHandle:^(NSArray<UIImage *> *photos, NSArray *assets, BOOL isSelectOriginalPhoto) {
NSLog(@"photos=%@",photos);
NSLog(@"assets=%@",assets);
NSLog(@"isSelectOriginalPhoto=%d",isSelectOriginalPhoto);
//这里只显示第一个图片作为例子
weakSelf.imageV1.image = photos.firstObject;
}];
}
- (IBAction)btnPopTzVCClick:(id)sender {
//弹出Tz图片控制器
[self presentViewController:self.imagePickerVc animated:true completion:nil];
}
- (IBAction)btnJumSwiftVCClick:(id)sender {
//弹出swift代码的控制器
VC2 *vc = [[VC2 alloc]init];
[self.navigationController pushViewController:vc animated:true];
}
@end
storyBoard中的按钮
在这里插入图片描述
swift调用的时候不能调用里面的block,需要自定义一个类方法
let imagePickerVc = TZImagePickerController()
imagePickerVc.maxImagesCount = 1
imagePickerVc.didFinishPickingVideoHandle =
这段swift代码的didFinishPickingVideoHandle 没法自动提示block参数赋值,解决方法是写一个oc类方法
oc类方法如下:只是让swift能够自动提示方法的参数
setTzOc.h文件
//
// setTzOc.h
// TZImagePickerControllerDemo
//
// Created by tdw on 2020/12/8.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@class TZImagePickerController;
@interface setTzOc : NSObject
+(void)setBlock:(TZImagePickerController*)vc andBlock:(void(^)(NSArray<UIImage *>* , NSArray *, BOOL ))block;
@end
NS_ASSUME_NONNULL_END
setTzOc.m文件
//
// setTzOc.m
// TZImagePickerControllerDemo
//
// Created by tdw on 2020/12/8.
//
#import "setTzOc.h"
#import "TZImagePickerController.h"
@implementation setTzOc
+(void)setBlock:(TZImagePickerController*)vc andBlock:(void(^)(NSArray<UIImage *>* , NSArray *, BOOL ))block{
[vc setDidFinishPickingPhotosHandle:^(NSArray<UIImage *> *photos, NSArray *assets, BOOL isSelectOriginalPhoto) {
block(photos,assets,isSelectOriginalPhoto);
}];
}
@end
swift代码中的调用封装的oc类
封装以后再打方法会弹出自动提示
swift代码如下:
//
// VC2.swift
// TZImagePickerControllerDemo
//
// Created by tdw on 2020/12/8.
//
import UIKit
class VC2: UIViewController {
var imagePickerVc:TZImagePickerController!
@IBOutlet weak var imageV1: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
imagePickerVc = TZImagePickerController()
imagePickerVc.maxImagesCount = 1 //这里设置单选
setTzOc.setBlock(imagePickerVc) {[weak self] (images, assets, isSelectOriginalPhoto) in
print("images=",images)
print("assets=",assets)
print("isSelectOriginalPhoto=",isSelectOriginalPhoto)
self?.imageV1.image = images.first
}
}
@IBAction func btn1Click(_ sender: Any) {
self .present(imagePickerVc, animated: true, completion: nil)
}
deinit {
print("deinit")
}
}
看下运行效果
最后是代码
我用的最新版的Version 12.2 (12B45b) ios是14.2如果运行不了的朋友可以升级xcode到最新版
代码下载地址:
https://download.csdn.net/download/boildoctor/13583072