2011-08-26 25 views
0

我有一個UIView,與UIViews作爲子視圖。每個這些子UIViews的繪製使用的drawRect的圖像,並且可以具有使用的CALayer shadowOffset,shadowRadius,shadowOpacity陰影。CALayer的陰影偏移太多與renderInContext到一個較小的範圍內

這一切工作很大,但我採取使用renderInContext頂部的UIView的縮略圖。陰影都顯示在離子UIView很遠的地方。

由於陰影偏移,這是正確的,但我需要在renderInContext方法期間陰影偏移量更小(或爲零),因爲縮略圖上下文比UIView上下文小得多。

我可以renderInContext一個大背景,然後規模,但儀器顯示的大背景下的內存使用跳躍3-4MB的這短短的時間,和內存資源緊張。

有沒有實現這一點的另一種方式?或者是renderInContext方法的快速替代方法,用於獲取UIView層次結構的縮略圖捕獲?


編輯: 而不是使用的CALayer shadowOffset的,我一直在使用CGContextSetShadowWithColor內的drawRect嘗試: - 這個工作,但陰影被修剪,即使clipsToBounds設置爲NO。關於這個選擇的任何想法?

謝謝。

回答

1

這個答案修復它: Getting a resized screenshot from a UIView

我一直在使用:

thumbnailSize = CGSizeMake(PAGE_THUMB_HEIGHT, PAGE_THUMB_WIDTH); 
UIGraphicsBeginImageContext(thumbnailSize); 
CGContextScaleCTM(UIGraphicsGetCurrentContext(), thumbnailSize.width/viewToCapture.bounds.size.width, thumbnailSize.height/viewToCapture.bounds.size.height); 
[viewToCapture.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *flattenedImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

但UIGraphicsBeginImageContextWithOptions修復它:

CGSize thumbnailSize = CGSizeMake(PAGE_THUMB_WIDTH, PAGE_THUMB_HEIGHT); 
CGFloat scaleX = thumbnailSize.width/viewToCapture.bounds.size.width; 
CGFloat scaleY = thumbnailSize.height/viewToCapture.bounds.size.height; 
UIGraphicsBeginImageContextWithOptions(viewToCapture.bounds.size, YES, scaleX > scaleY ? scaleY : scaleX); 
[viewToCapture.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *flattenedImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext();