2011-08-03 59 views
1

我幾乎逐字地使用了http://developer.apple.com/library/ios/#qa/qa1714/_index.html的示例代碼,我可以保存背景圖像或覆蓋圖,但我無法將這兩者結合起來。當我嘗試使用以下代碼將它們組合在一起時,疊加層呈現背景爲白色,並且我假設它覆蓋背景。任何想法爲什麼這是?當使用renderIcontext通過UIImage繪製UIView截圖時,我的UIImage不顯示

這裏是我的方法,嘗試將視圖疊加與圖像相結合:

-(void) annotateStillImage 
{ 
    UIImage *image = stillImage; 

    // Create a graphics context with the target size 
    CGSize imageSize = [[UIScreen mainScreen] bounds].size; 
    UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0); 

    CGContextRef context = UIGraphicsGetCurrentContext(); 


    // Draw the image returned by the camera sample buffer into the context. 
    // Draw it into the same sized rectangle as the view that is displayed on the screen. 
    UIGraphicsPushContext(context); 

    [image drawInRect:CGRectMake(0, 0, imageSize.width, imageSize.height)]; 
    UIGraphicsPopContext(); 

    // -renderInContext: renders in the coordinate space of the layer, 
    // so we must first apply the layer's geometry to the graphics context 
    CGContextSaveGState(context); 
    // Center the context around the window's anchor point 
    CGContextTranslateCTM(context, [[self view] center].x, [[self view] center].y); 
    // Apply the window's transform about the anchor point 
    CGContextConcatCTM(context, [[self view] transform]); 
    // Offset by the portion of the bounds left of and above the anchor point 
    CGContextTranslateCTM(context, 
          -[[self view] bounds].size.width * [[[self view] layer] anchorPoint].x, 
          -[[self view] bounds].size.height * [[[self view] layer] anchorPoint].y); 

    // Render the layer hierarchy to the current context 
    [[[self view] layer] renderInContext:context]; 

    // Restore the context 
    CGContextRestoreGState(context); 

    // Retrieve the screenshot image containing both the camera content and the overlay view 
    stillImage = UIGraphicsGetImageFromCurrentImageContext(); 

    UIGraphicsEndImageContext(); 
} 

這裏是我的方法的代碼段這情況下,這是有關創建視圖:

CGRect layerRect = [[[self view] layer] bounds]; 
[[self previewLayer] setBounds:layerRect]; 
[[self previewLayer] setPosition:CGPointMake(CGRectGetMidX(layerRect), CGRectGetMidY(layerRect))]; 
[[[self view] layer] addSublayer:[self previewLayer]]; 

UIButton *overlayButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[overlayButton setImage:[UIImage imageNamed:@"acceptButton.png"] forState:UIControlStateNormal]; 
[overlayButton setFrame:[self rectForAcceptButton] ]; 
[overlayButton setAutoresizesSubviews:TRUE]; 
[overlayButton setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin]; 
[overlayButton addTarget:self action:@selector(acceptButtonPressed) forControlEvents:UIControlEventTouchUpInside]; 
[[self view] addSubview:overlayButton]; 

我我期望註釋方法中的圖像是背景,並且視圖圖形中的接受按鈕將添加在頂部。我所得到的只是接受按鈕和一個白色背景,但如果我不運行renderInContext方法,我所得到的僅僅是圖像背景並且沒有重疊。

謝謝!

回答

2

原來我是將疊加層添加到與預覽圖層相同的視圖,而不是將它放在其自己的視圖上。我意識到這一點,通過審查這個偉大的項目,涵蓋所有類型的截圖可能:https://github.com/cocoacoderorg/Screenshots

修復是在IB創建一個單獨的覆蓋視圖與透明背景,並添加我的覆蓋元素。

+0

謝謝斯科特。它工作得非常好:)幫了我很多:) – Hemang