您的位置:首页 > 其它

截屏功能

2015-03-11 15:07 190 查看
- (UIImage *)takeScreenshot
{

// Source (Under MIT License):
https://github.com/shinydevelopment/SDScreenshotCapture/blob/master/SDScreenshotCapture/SDScreenshotCapture.m#L35
BOOL ignoreOrientation =
SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0");

UIInterfaceOrientation orientation = [UIApplication
sharedApplication].statusBarOrientation;

CGSize imageSize =
CGSizeZero;

if (UIInterfaceOrientationIsPortrait(orientation) || ignoreOrientation)
imageSize = [UIScreen
mainScreen].bounds.size;

else

imageSize = CGSizeMake([UIScreen
mainScreen].bounds.size.height, [UIScreen
mainScreen].bounds.size.width);

UIGraphicsBeginImageContextWithOptions(imageSize,
NO,
0);

CGContextRef context =
UIGraphicsGetCurrentContext();

CGContextSaveGState(context);

CGContextTranslateCTM(context,
self.center.x,
self.center.y);

CGContextConcatCTM(context,
self.transform);

CGContextTranslateCTM(context, -self.bounds.size.width
* self.layer.anchorPoint.x, -self.bounds.size.height
* self.layer.anchorPoint.y);

// Correct for the screen orientation

if(!ignoreOrientation)
{

if(orientation ==
UIInterfaceOrientationLandscapeLeft)
{

CGContextRotateCTM(context, (CGFloat)M_PI_2);

CGContextTranslateCTM(context,
0, -imageSize.width);
}

else
if(orientation ==
UIInterfaceOrientationLandscapeRight)
{

CGContextRotateCTM(context, (CGFloat)-M_PI_2);

CGContextTranslateCTM(context, -imageSize.height,
0);
}

else
if(orientation ==
UIInterfaceOrientationPortraitUpsideDown)
{

CGContextRotateCTM(context, (CGFloat)M_PI);

CGContextTranslateCTM(context, -imageSize.width, -imageSize.height);
}
}

if([self
respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)])

[self
drawViewHierarchyInRect:self.bounds
afterScreenUpdates:NO];

else

[self.layer
renderInContext:UIGraphicsGetCurrentContext()];

CGContextRestoreGState(context);

UIImage *image =
UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return image;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: