Files
yuyin_ios/SweetParty/主类/Others/NewTools/MSCommonTool.m
2025-08-08 11:05:33 +08:00

113 lines
4.9 KiB
Objective-C
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// MSCommonTool.m
// misheng
//
// Created by bj_szd on 2022/10/19.
// Copyright © 2022 syllable interactive. All rights reserved.
//
#import "MSCommonTool.h"
@implementation MSCommonTool
+ (BRPickerStyle *)customPickerViewUI {
BRPickerStyle *style = [[BRPickerStyle alloc] init];
style.selectedColor = [UIColor whiteColor];
style.topCornerRadius = 10;
style.hiddenShadowLine = YES;
style.hiddenTitleLine = YES;
style.hiddenTitleLabel = YES;
style.titleBarColor = HEXCOLOR(0xF5F7F7);
style.cancelTextColor = HEXCOLOR(0x999999);
style.cancelTextFont = [UIFont boldSystemFontOfSize:16];
style.cancelBtnFrame = CGRectMake(0, 0, 60, 50);
style.cancelBtnTitle = @"取消";
style.doneTextColor = mainDeepColor;
style.doneTextFont = [UIFont boldSystemFontOfSize:16];
style.doneBtnFrame = CGRectMake(SCREEN_WIDTH-60, 0, 60, 50);
style.doneBtnTitle = @"确定";
style.separatorColor = [UIColor clearColor];
style.pickerTextColor = HEXCOLOR(0x333333);
style.pickerTextFont = [UIFont systemFontOfSize:16];
style.pickerColor = HEXCOLOR(0xF5F7F7);;
style.rowHeight = 44;
return style;
}
+ (UIImage *)convertViewToImage:(UIView *)view{
CGSize size = view.bounds.size;
//下面方法第一个参数表示区域大小。第二个参数表示是否是非透明的。如果需要显示半透明效果需要传NO否则传YES。第三个参数就是屏幕密度了
UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage*image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
+ (void)saveImage:(UIImage *)image assetCollectionName:(NSString *)collectionName {
// 1. 获取当前App的相册授权状态
PHAuthorizationStatus authorizationStatus = [PHPhotoLibrary authorizationStatus];
// 2. 判断授权状态
if (authorizationStatus == PHAuthorizationStatusAuthorized) {
// 2.1 如果已经授权, 保存图片(调用步骤2的方法)
[self saveImage:image toCollectionWithName:collectionName];
} else if (authorizationStatus == PHAuthorizationStatusNotDetermined) { // 如果没决定, 弹出指示框, 让用户选择
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
// 如果用户选择授权, 则保存图片
if (status == PHAuthorizationStatusAuthorized) {
[self saveImage:image toCollectionWithName:collectionName];
}
}];
} else {
[HelpPageDefine showMessage:@"请在设置界面, 授权访问相册"];
}
}
// 保存图片
+ (void)saveImage:(UIImage *)image toCollectionWithName:(NSString *)collectionName {
// 1. 获取相片库对象
PHPhotoLibrary *library = [PHPhotoLibrary sharedPhotoLibrary];
// 2. 调用changeBlock
[library performChanges:^{
// 2.1 创建一个相册变动请求
PHAssetCollectionChangeRequest *collectionRequest;
// 2.2 取出指定名称的相册
PHAssetCollection *assetCollection = [self getCurrentPhotoCollectionWithTitle:collectionName];
// 2.3 判断相册是否存在
if (assetCollection) { // 如果存在就使用当前的相册创建相册请求
collectionRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:assetCollection];
} else { // 如果不存在, 就创建一个新的相册请求
collectionRequest = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:collectionName];
}
// 2.4 根据传入的相片, 创建相片变动请求
PHAssetChangeRequest *assetRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image];
// 2.4 创建一个占位对象
PHObjectPlaceholder *placeholder = [assetRequest placeholderForCreatedAsset];
// 2.5 将占位对象添加到相册请求中
[collectionRequest addAssets:@[placeholder]];
} completionHandler:^(BOOL success, NSError * _Nullable error) {
// 3. 判断是否出错, 如果报错, 声明保存不成功
dispatch_async(dispatch_get_main_queue(), ^{
if (error) {
[HelpPageDefine showMessage:@"保存失败"];
} else {
[HelpPageDefine showMessage:@"保存成功"];
}
});
}];
}
+ (PHAssetCollection *)getCurrentPhotoCollectionWithTitle:(NSString *)collectionName {
// 1. 创建搜索集合
PHFetchResult *result = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
// 2. 遍历搜索集合并取出对应的相册
for (PHAssetCollection *assetCollection in result) {
if ([assetCollection.localizedTitle containsString:collectionName]) {
return assetCollection;
}
}
return nil;
}
@end