2014-07-21 56 views
1

我注意到,在Safari中,如果我通過Twitter共享頁面,則會生成正在共享的頁面的縮略圖。如何使用iOS爲網頁創建縮略​​圖?

我搜索了Google,發現AVAssetImageGenerator包可以創建視頻縮略圖。有沒有類似的方式來創建網頁的縮略圖?

回答

2

您可以通過創建UIWebViews中的縮略圖:

UIView *newView = [view snapshotViewAfterScreenUpdates:YES]; 

,或者您可以使用,以及:

UIGraphicsBeginImageContextWithOptions(myView.bounds.size, NO, 0); 

[myView drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES]; 

UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 

重要!如果你想創建一個UIWebView的縮略圖,你可以發現像你截圖和頁面沒有完全加載的問題,所以我建議你在頁面加載的時候做,或者,因爲我不得不做,把一個JavaScript標誌本地調用iOS,並在這個特定的時刻截圖。你可以保存縮略圖,使用你想要的機制存儲它們(例如coredata,並有一個持久的數據庫來快速訪問信息),或者你可以使用配置文件和應用程序內部文件夾的路徑,這是真的由你決定。但請記住UIWebView加載內容的時間,因爲有時候,我們會截取屏幕截圖,並且視圖中沒有任何內容,並且您將始終空白頁。 取代以下截圖:webView:shouldStartLoadWithRequest:navigationType:將其放入webViewDidFinishLoad:但請記住,這並不意味着網頁已正確加載!你可以有一個ajax事件或一個外部的javascript事件來上傳屏幕上的內容,但UIWebView可以說它已經加載時,它沒有!所以這就是使用JavaScript標誌來本地調用內部函數來截取屏幕截圖的原因。

一旦你獲得了屏幕截圖,你將不得不調整它的大小以獲得你的縮略圖。例如,你可以使用:

+ (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize { 
    //UIGraphicsBeginImageContext(newSize); 
    // In next line, pass 0.0 to use the current device's pixel scaling factor (and thus account for Retina resolution). 
    // Pass 1.0 to force exact pixel size. 
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0); 
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)]; 
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();  
    UIGraphicsEndImageContext(); 
    return newImage; 
} 

(在The simplest way to resize an UIImage?找到解決方案)

但有幾個方法可以做到這一點。我認爲最好的方法是添加一個類別,並以您想要的方式調整功能。

希望它可以幫助

+0

感謝您的回覆,我將檢查 – maple

+0

@AlfuryDB嗨,也許我沒有描述清楚我的問題,我希望得到這個網頁的網址沒有打開它。 – maple

+0

嗨,@alfuryDB,我誤解'SLComposeViewController',實際上,當我添加一個url [twitter addURL:url],那麼這將是一個縮略圖。 – maple