在我的项目中,如果用户单击图像,我将获得带有图像文件名的路径。我需要在 iPhone 的默认图像查看器中打开图像。
提前致谢
我在我的一个项目中使用了 QLPreviewController。我认为这是最容易实施的选择。我也不知道这是否是您正在寻找的解决方案。
我用以下代码创建了它
Class qlookclass = NSClassFromString(@"QLPreviewController");
if(qlookclass){
//check if the image exists
if([[NSFileManager defaultManager] fileExistsAtPath:@"someimage.png"]){
id quickLookPreview = [[qlookclass alloc]init];
[quickLookPreview setDataSource:self];
[self presentModalViewController:quickLookPreview animated:YES];
[quickLookPreview release];
}
}
这些是委托方法
#pragma mark QLPreviewController delegate methods
- (NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller {
return 1;
}
- (id <QLPreviewItem>) previewController: (QLPreviewController *) controller previewItemAtIndex: (NSInteger) index {
NSURL *imageURL = [NSURL fileURLWithPath:@"someimage.png"];
return imageURL;
}
您需要添加 QLPreviewControllerDelegate 和 QLPreviewControllerDataSource。
这已经是问题中已接受的答案 是否有一个类可以获取应用程序中的默认图片查看器?
希望有帮助...
检查此问题和答案获取相册中最后保存的照片
如果您的图像未保存在“照片”中,请先使用
保存图像UIImageWriteToSavedPhotosAlbum(UIImage *image,
id completionTarget,
SEL completionSelector,
void *contextInfo);
https://stackoverflow.com/a/179066/3976183
或者您可以使用
photos-redirect://
URL方案,它适用于照片应用程序。
或者你可以使用 UIImagePickerController
您可以使用画廊或实现您自己的。
只要google一下,你就会发现很多适用于iOS的图库项目,从中你还可以学习如何自己创建一个。
我已经使用过的一个好方法是:https://github.com/mariohahn/MHVideoPhotoGallery
有多种方法可以在默认视图中查看图像。
@interface YourViewController : UIViewController<QLPreviewControllerDataSource,QLPreviewControllerDelegate>
arrImages = [[NSArray alloc] initWithObjects:@"img_1.jpg", @"img_2.jpg", nil];
QLPreviewController *previewController = [[QLPreviewController alloc]init];
previewController.delegate = self;
previewController.dataSource = self;
[self presentViewController:previewController animated:TRUE completion:^{ }];
#pragma mark - Preview Delegate
- (NSInteger)numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller
{
return [arrImages count];
}
- (id <QLPreviewItem>)previewController: (QLPreviewController *)controller previewItemAtIndex:(NSInteger)index
{
NSArray *fileComponents = [[arrayOfDocuments objectAtIndex: index] componentsSeparatedByString:@"."];
NSString *path = [[NSBundle mainBundle] pathForResource:[fileComponents objectAtIndex:0] ofType:[fileComponents objectAtIndex:1]];
return [NSURL fileURLWithPath:path];
}
另一种方式是:
NSString* path = [[NSBundle mainBundle] pathForResource:@"imgName" ofType:@"jpg"];
if (path)
{
NSURL* url = [NSURL fileURLWithPath:path];
UIDocumentInteractionController* docController = [UIDocumentInteractionController interactionControllerWithURL:url];
docController.delegate = self;
[docController presentPreviewAnimated:YES];
}
请注意,以防有人正在寻找 SwiftUI 的答案。截至 2022 年,SwiftUI 现在直接支持 QuickLook。
从 nil URL 开始并将其设置为一个值会启动 Apple 的本机快速预览预览器。
import SwiftUI
import QuickLook
struct ContentView: View {
@State var url: URL?
var body: some View {
Button("Preview") {
url = Bundle.main.url(
forResource: "meadow",
withExtension: "jpg"
)
}
.quickLookPreview($url)
}
}