【发布时间】:2018-06-11 01:28:20
【问题描述】:
我想在 iOS 10 中创建并保存UIImage。我可以通过拍摄UIView 快照或使用UIGraphicsImageRenderer 来创建它(如下所示)。
- (UIView *)createIcon
{
UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:CGSizeMake(200, 200)];
UIImage *image = [renderer imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull context) {
[[UIColor darkGrayColor] setStroke];
[context strokeRect:renderer.format.bounds];
[[UIColor colorWithRed:158/255.0 green:215/255.0 blue:245/255.0 alpha:0.5] setFill];
[context fillRect:CGRectMake(30, 30, 140, 140)];
[[UIColor colorWithRed:243/255.0 green:122/255.0 blue:216/255.0 alpha:0.3] setFill];
CGContextFillEllipseInRect(context.CGContext, CGRectMake(30, 30, 120, 120));
}];
UIImageView *showImage = [[UIImageView alloc] initWithImage:image];
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
return showImage;
}
但是,当我尝试使用 UIImageWriteToSavedPhotosAlbum 通过包含倒数第二个语句来保存时,Xcode 进入调试并显示以下错误报告
(lldb) bt
* thread #5, queue = 'com.apple.root.default-qos', stop reason = signal SIGABRT
* frame #0: 0x00000001101611a6 libsystem_kernel.dylib`__abort_with_payload + 10
frame #1: 0x000000011015b86e libsystem_kernel.dylib`abort_with_payload_wrapper_internal + 89
frame #2: 0x000000011015b89b libsystem_kernel.dylib`abort_with_payload + 9
frame #3: 0x0000000108ab3af7 TCC`__CRASHING_DUE_TO_PRIVACY_VIOLATION__ + 182
frame #4: 0x0000000108ab3a41 TCC`__TCCAccessRequest_block_invoke.77 + 665
frame #5: 0x0000000108ab7273 TCC`__tccd_send_block_invoke + 274
所以即使我没有使用相机创建图像,将其保存到相册也是侵犯隐私(嘶嘶,嘘)!我知道可以设置privacy keys in the plist,但有更明智的选择吗?
澄清
我希望在应用程序中使用渲染图像(或视图快照)作为资产。那么除了还有更明智的选择吗?
也许我应该问
是否有其他地方可以保存图像(即保存为 PNG 或 JPG 文件),因此隐私不是问题?
【问题讨论】:
标签: ios objective-c iphone uiimage plist