2013-10-27 39 views
1

我有一個UITable與UITableView擴展在鍵盤下方。表格視圖中的內容足夠明亮,清楚地表明內容位於鍵盤後面。我試圖把整個視圖的屏幕截圖,以便使用下面的代碼進行模糊處理:模糊UIView,其中包含下方的內容(iOS 7)

- (UIImage *)screenshotFromView:(UIView *)view; 
{ 
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, 0.0); 
    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO]; 

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return image; 
} 

然而,返回的圖像不會創建一個透明鍵盤。當從非模糊視圖轉到模糊視圖時,這呈現出奇怪的過渡,因爲在過渡到模糊圖像之前在鍵盤背後明顯存在內容。

是否可以在不使用私有API的情況下截屏整個屏幕,同時仍保持鍵盤+狀態欄的透明度?

+0

您能否澄清一下,您想截取包含的屏幕 - 鍵盤的屏幕截圖以便模糊它?是否在關閉應用程序之前顯示它以模糊重要信息,以便它們在多任務面板中不可見? – AncAinu

回答

0

您是否考慮過使用UIKeyboardAppearanceDark?目前keyboardAppearance的默認值對應於UIKeyboardAppearanceLight,所以它可能不適合您的使用情況。

+0

是的,我使用UIKeyboardAppearanceDark時遇到的問題實際上發生。問題是我無法在屏幕截圖中捕捉到鍵盤的透明度。 – bdev

2

我得到了你這幾天的確切問題,所以我完全知道你想要什麼。我希望整個用戶界面模糊在包括鍵盤在內的消息後面,這是沒有任何常規屏幕截圖方法。我的治療是下面的代碼:

- (UIImage*)screenShotWithKeyboard:(UIView *)viewToShoot 
{ 
    UIWindow *keyboard = nil; 
    for (UIWindow *window in [[UIApplication sharedApplication] windows]) 
    { 
     if ([[window description] hasPrefix:@"<UITextEffectsWin"]) 
     { 
      keyboard = window; 
      break; 
     } 
    } 

    // Define the dimensions of the screenshot you want to take (the entire screen in this case) 
    CGSize size = [[UIScreen mainScreen] bounds].size; 

    // Create the screenshot 
    UIGraphicsBeginImageContext(size); 

    CGContextRef context=UIGraphicsGetCurrentContext(); 

    // delete following line if you only want the keyboard 
    [[viewToShoot layer] renderInContext:context]; 

    if(keyboard!=nil) 
     [[keyboard layer] renderInContext:context]; 

    UIImage *screenImg = UIGraphicsGetImageFromCurrentImageContext(); 

    UIGraphicsEndImageContext(); 

    return screenImg; 
} 

我上心從Aran Balkan的文章中,我把它弄壞了下來一個方法和testet它的iOS 7,這似乎爲我工作。這篇文章值得一讀,他解釋了一些背後的詭計。由於您只需將實際的鍵盤作爲圖像,您可以註釋掉我在代碼中標記的行。有了這個圖像鍵盤,你可以自己做模糊材料。代碼遠非完美,但我認爲你有這個想法。

兩個認爲在最後: 我是一個新手到客觀的C和iOS開發。如果您發現任何有問題的錯誤,歡迎發表評論以改進此答案。其次,我今天在應用程序中編寫了這段代碼,但我還不知道是否違反了iOS的任何開發者規則。目前我沒有看到任何問題,但我會進一步調查,因爲我想用該圖形技巧發佈我的應用程序。我會保持這篇文章更新。直到比起第一點,我將非常感謝對此問題的任何評論。

+0

感謝您的評論馬丁!儘管上面的代碼捕獲了鍵盤,但不幸的是它並不捕獲鍵盤的透明度。因此,如果內容背後有任何豐富多彩的內容,模糊過渡將繼續顯得尷尬 - 因爲看起來好像在模糊期間移除了豐富多彩的內容。 – bdev

+0

@bdev是的,看起來我很高興幫助,我不明白你真正的問題。對於那個很抱歉。 –