2011-06-29 70 views
0

我目前正在iPad上開發一個基於JavaScript的小型繪圖應用程序。我簡單地將它包裝在UIWebView中,如this。現在的事情是,我無法弄清楚如何從應用程序保存圖像,以便它存儲在iPad照片上。如何使用iPad上的JavaScript/Obj-C將圖像保存到照片庫?

有沒有一些簡單的方法來銜接JavaScript代碼和Objective-C?我想我可以傳遞一個包含來自JS端的PNG圖像數據的字符串,然後使用Objective-C以某種方式將其保存到照片庫。

回答

1

是的,有一種方法可以將JavaScript從UIWebView橋接到Obj-C代碼。

設置你的UIWebView的委託,並在委託貼在下面的方法

// 
// Map links starting with file:// 
//   ending with #action 
// with the action of the controller if it exists. 
// 
// Open other links in Safari. 
- (BOOL)webView: (UIWebView*)webView shouldStartLoadWithRequest: (NSURLRequest*)request navigationType: (UIWebViewNavigationType)navigationType { 
    NSString *fragment, *scheme; 

    if (navigationType == UIWebViewNavigationTypeLinkClicked) { 
     [webView stopLoading]; 
     fragment = [[request URL] fragment]; 
     scheme = [[request URL] scheme]; 

     if ([scheme isEqualToString: @"file"] && [self respondsToSelector: NSSelectorFromString(fragment)]) { 
      [self performSelector: NSSelectorFromString(fragment)]; 
      return NO; 
     } 

     [[UIApplication sharedApplication] openURL: [request URL]]; 
    } 

    return YES; 
} 

然後,你可以寫的OBJ-C的方法是將處理該請求。例如。在你的web視圖中,你可能有一個鏈接標籤的按鈕,如

<a href="file://myGreatApp.com/saveImage">Click Me to Save Image </a> 

該方案是「文件」的片段是「saveImage」。您現在可以編寫Obj-C方法

-(void)saveImage; 

每次用戶單擊鏈接時都會調用該函數。

編輯: 如果您想在您的方法中傳遞字符串參數,只需使用javascript將它們附加到您的片段url。所以相反,你可能有

<a href="file://myGreatApp.com/saveImage*asdgo8asdgl35lkjasgd807ll12">Click Me to Save Image </a> 

然後在你的Obj-C代碼中,在char'*'上分割片段。使用前半部分作爲選擇器,後半部分作爲參數。

+0

任何想法如何從JS應用程序傳遞數據(只是一個字符串)Obj-C?我可能在這裏忽略了一點。不過謝謝你的回答。 :) –

+0

使用char分隔符並將其附加到您的片段。所以使用javascript來動態創建鏈接href文件://myGreatApp.com/saveImage*imgdataimgdataimgdataimgdata。然後在obj c代碼中,你會用'*'分割片段。前半部分變爲您的選擇器'saveImage',而後半部分變爲您在選擇器中傳遞的字符串對象。 – Andrew

+0

我最終使用這個解決方案,http://blog.techno-barje.fr/post/2010/10/06/UIWebView-secrets-part3-How-to-properly-call-ObjectiveC-from-Javascript。 –

相關問題