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

时间:2015-06-17 08:49:12

标签: ios xcode xcode6

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

提前致谢

4 个答案:

答案 0 :(得分: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。

这个问题已经是一个公认的答案 is there a class to get the default picture viewer in an app?

希望它有所帮助...

答案 1 :(得分:0)

检查此问题并回答Get the last saved Photo in photo album

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

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

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

或者您可以使用photos-redirect://网址计划,它适用于Photo应用。 或者您可以使用UIImagePickerController

同时查看此https://stackoverflow.com/a/8872425/3976183答案。

答案 2 :(得分:0)

您可以使用图库或实施自己的图库。

只需google它,你就会发现许多适用于iOS的图库项目,你也可以从中学习如何创建一个。

我已经使用过的好词是:https://github.com/mariohahn/MHVideoPhotoGallery

答案 3 :(得分:0)

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

openssl s_client -starttls smtp -connect smtp.gmail.com:587

另一种方式是:

    void main ()
    {
        int err;
        int sd;
        struct sockaddr_in sa;
        SSL_CTX* ctx;
        SSL* ssl;
        X509* server_cert;
        char* str;
        const SSL_METHOD *meth;

        WSADATA wsaData;

        if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0){
        printf("WSAStartup()fail:%d\n",GetLastError());
        return -1;
        } 

        SSL_library_init();

        SSL_load_error_strings(); 

        meth = TLSv1_2_client_method();
        ctx = SSL_CTX_new (meth); 
        CHK_NULL(ctx);


        // begin win socket .............................. 
        printf("Begin tcp socket...\n");

        sd = socket (AF_INET, SOCK_STREAM, 0); CHK_ERR(sd, "socket");

        memset (&sa, 0, sizeof(sa));
        sa.sin_family = AF_INET;
        sa.sin_addr.s_addr = inet_addr (SERVER_ADDR); /* Server IP */
        sa.sin_port = htons (PORT); /* Server Port number */

        err = connect(sd, (struct sockaddr*) &sa,  sizeof(sa)); 
        if( sd == SOCKET_ERROR  ) {
        std::cout<<"connect error."<<std::endl;
        return -1;
        }


        /* SSl negotiation .................. */
        printf("Begin SSL negotiation \n");

        ssl = SSL_new (ctx); 
        CHK_NULL(ssl);

        SSL_set_fd (ssl, sd);

    //ssl connect error here????        
    //What's wrong

        err = SSL_connect (ssl);
        if (err == -1)
        {
        ERR_print_errors_fp(stderr);
        }
    }