如何通过提供文件路径在默认图像查看器中打开图像?

问题描述 投票:0回答:5

在我的项目中,如果用户单击图像,我将获得带有图像文件名的路径。我需要在 iPhone 的默认图像查看器中打开图像。

提前致谢

ios xcode xcode6
5个回答
1
投票

我在我的一个项目中使用了 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。

这已经是问题中已接受的答案 是否有一个类可以获取应用程序中的默认图片查看器?

希望有帮助...


0
投票

检查此问题和答案获取相册中最后保存的照片

如果您的图像未保存在“照片”中,请先使用

保存图像
UIImageWriteToSavedPhotosAlbum(UIImage *image, 
                               id completionTarget, 
                               SEL completionSelector, 
                               void *contextInfo);

https://stackoverflow.com/a/179066/3976183

或者您可以使用

photos-redirect://
URL方案,它适用于照片应用程序。 或者你可以使用
UIImagePickerController

另请检查此https://stackoverflow.com/a/8872425/3976183答案。


0
投票

您可以使用画廊或实现您自己的。

只要google一下,你就会发现很多适用于iOS的图库项目,从中你还可以学习如何自己创建一个。

我已经使用过的一个好方法是:https://github.com/mariohahn/MHVideoPhotoGallery


0
投票

有多种方法可以在默认视图中查看图像。

@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];
}

0
投票

请注意,以防有人正在寻找 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)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.