截屏功能
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;
}
{
// 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;
}
相关文章推荐
- Ubuntu -- Ubuntu 16.04 截屏功能
- Android系统截屏功能提取
- WorldWind学习系列三:简单功能分析——截屏功能和“关于”窗体分析
- C#模拟QQ截屏功能
- iOS 截屏功能代码
- android截屏与截长图截屏功能的实现
- Android 视频播放器截屏功能实现讲解
- 【玩转cocos2d-x之三十九】Cocos2d-x 3.0截屏功能集成
- web截屏功能的实现
- android 截屏功能管控,截止截屏和启用截屏
- iPhone 应用里实现截屏功能的代码
- iPhone 应用里实现截屏功能的代码
- Windows 自带的截屏功能
- 利用Ogre的渲染到材质技术实现Ogre截屏功能
- iOS截屏功能的实现
- Cocos2d-x 截屏功能集成
- 利用Ogre的渲染到材质技术实现Ogre截屏功能
- 截屏功能不能用
- 【读书笔记】iOS-截屏功能的实现。
- Mac OS X下的截屏功能和使用技巧