2012-09-11 2 views
0

UIImageView를 어떤 각도로 회전시킨 후에 스크린 샷을 찍고 싶습니다. 이 코드를 사용하지만 바운더리에서 부분 분할 된 스크린 샷을 얻는다면 전체 스크린 샷을 얻을 수 없다는 것을 의미합니다. 여기 UIInageVew 내 예를 imgDisplayImage입니다 lastRotation는회전 후 UIImageView의 스크린 샷

// Create a graphics context with the target size 
// On iOS 4 and later, use UIGraphicsBeginImageContextWithOptions to take the scale into consideration 
// On iOS prior to 4, fall back to use UIGraphicsBeginImageContext 
CGSize imageSize = self.imgDisplayImage.frame.size; 
if (NULL != UIGraphicsBeginImageContextWithOptions) 
    UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0.0); 
else 
    UIGraphicsBeginImageContext(imageSize); 

CGContextRef context = UIGraphicsGetCurrentContext(); 


CGContextSaveGState(context); 

CGContextTranslateCTM(context, [self.imgDisplayImage center].x, [self.imgDisplayImage center].y); 
CGContextRotateCTM(context, lastRotation); 
CGContextTranslateCTM(context, 
         -self.imgDisplayImage.frame.size.width * [[self.imgDisplayImage layer] anchorPoint].x, 
         -self.imgDisplayImage.frame.size.height * [[self.imgDisplayImage layer] anchorPoint].y); 

    [self.imgDisplayImage.layer renderInContext:context]; 
CGContextRestoreGState(context); 

// Retrieve the screenshot image 
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext(); 
UIImageWriteToSavedPhotosAlbum(screenshot, nil, nil, nil); 

답변

1

다음 코드를 사용해보십시오 총 회전 각도를합니다. 여기 Mailimage는 최종 스크린 샷입니다

- (UIImage*)screenshot 
{ 
    // Create a graphics context with the target size 
    // On iOS 4 and later, use UIGraphicsBeginImageContextWithOptions to take the scale into consideration 
    // On iOS prior to 4, fall back to use UIGraphicsBeginImageContext 
    CGSize imageSize = [[UIScreen mainScreen] bounds].size; 
    if (NULL != UIGraphicsBeginImageContextWithOptions) 
     UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0); 
    else 
     UIGraphicsBeginImageContext(imageSize); 

    CGContextRef context = UIGraphicsGetCurrentContext(); 

    // Iterate over every window from back to front 
    for (UIWindow *window in [[UIApplication sharedApplication] windows]) 
    { 
     if (![window respondsToSelector:@selector(screen)] || [window screen] == [UIScreen mainScreen]) 
     { 
      // -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, [window center].x, [window center].y); 
      // Apply the window's transform about the anchor point 
      CGContextConcatCTM(context, [window transform]); 
      // Offset by the portion of the bounds left of and above the anchor point 
      CGContextTranslateCTM(context, 
            -[window bounds].size.width * [[window layer] anchorPoint].x, 
            -[window bounds].size.height * [[window layer] anchorPoint].y); 

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

      // Restore the context 
      CGContextRestoreGState(context); 
     } 
    } 

    // Retrieve the screenshot image 
    Mailimage = UIGraphicsGetImageFromCurrentImageContext(); 

    UIGraphicsEndImageContext(); 

    return Mailimage; 


} 
+0

감사합니다.이 작업은 정상적으로 작동합니다. –