1

サブビューを持つ UIView のスクリーンショットを生成しようとしていCATransform3DMakeRotationます。スクリーンショットが生成されますが、回転が含まれていません。

これを達成することは可能ですか?

実際のビュー:

ここに画像の説明を入力

スクリーンショット画像

ここに画像の説明を入力

次の呼び出しを使用して、ビューを水平に反転します...

  currentView.layer.transform = CATransform3DConcat(currentView.layer.transform,CATransform3DMakeRotation(M_PI, 0.0, 1.0, 0.0f));

スクリーンショットを撮るためのコード

+ (UIImage *) imageWithView:(UIView *)view
{
    CGSize screenDimensions = view.bounds.size;

    // Create a graphics context with the target size
    // (last parameter takes scale into account)
    UIGraphicsBeginImageContextWithOptions(screenDimensions, NO, 0);

    // Render the view to a new context
    CGContextRef context = UIGraphicsGetCurrentContext();
    [view.layer renderInContext:context];

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

    return img;
}
4

6 に答える 6

6

「renderInContext」はアフィン変換でのみ機能します。したがって、このように3D変換をアフィン変換に変換します

currentView.layer.affineTransform = CATransform3DGetAffineTransform(CATransform3DConcat(currentView.layer.transform,CATransform3DMakeRotation(M_PI, 0.0, 1.0, 0.0f)));
于 2013-10-08T09:54:43.330 に答える
1

このコードを試してください

CGSize newSize = CGSizeMake(yourview.frame.size.width , yourview.frame.size.height);
UIGraphicsBeginImageContextWithOptions(newSize,YES,2.0f);
    CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
[yourview.layer renderInContext:context];
[yourview drawRect:yourview.frame];

UIImage *screenShot = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
于 2013-09-30T14:15:15.910 に答える
1

これはうまくいくかもしれません、試してみてください:

  CGRect grabRect = CGRectMake(40,40,300,200);

    //for retina displays
  if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
  UIGraphicsBeginImageContextWithOptions(grabRect.size, NO, [UIScreen mainScreen].scale);
  } else {
  UIGraphicsBeginImageContext(grabRect.size);
  }
  CGContextRef ctx = UIGraphicsGetCurrentContext();
  CGContextTranslateCTM(ctx, -grabRect.origin.x, -grabRect.origin.y);
  [self.view.layer renderInContext:ctx];
  UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
  UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);
于 2013-10-08T05:24:08.717 に答える
0

これを使用し、ビューを渡す前にそのサブビューをチェックします:

+ (UIImage *) imageWithView:(UIView *)view
{
    UIGraphicsBeginImageContext(CGSizeMake(view.frame.size.width, view.frame.size.height));
        [view.layer renderInContext:UIGraphicsGetCurrentContext()];
        UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
return viewImage
}
于 2013-10-08T14:05:55.457 に答える