3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
UIView *view = [[[[[UIApplication sharedApplication] windows] objectAtIndex:1] subviews] lastObject];
//获得某个window的某个subView
NSInteger
index = 0;
//用来给保存的png命名
for
(UIView *subView in [view subviews]) {
//遍历这个view的subViews
if
([subView isKindOfClass:
NSClassFromString
(@
"UIImageView"
)] || [subView isKindOfClass:
NSClassFromString
(@
"UIThreePartButton"
)]) {
//找到自己需要的subView
//支持retina高分的关键
if
(UIGraphicsBeginImageContextWithOptions !=
NULL
)
{
UIGraphicsBeginImageContextWithOptions(subView.frame.size,
NO
, 0.0);
}
else
{
UIGraphicsBeginImageContext(subView.frame.size);
}
//获取图像
[subView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//保存图像
NSString
*path = [
NSHomeDirectory
() stringByAppendingFormat:@
"/%d.png"
,index];
if
([UIImagePNGRepresentation(image) writeToFile:path atomically:
YES
]) {
index += 1;
NSLog
(@
"Succeeded!"
);
}
else
{
NSLog
(@
"Failed!"
);
}
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CGImageRef UIGetScreenImage();
@interface
UIImage (ScreenImage)
+ (UIImage *)imageWithScreenContents;
@end
@implementation
UIImage (ScreenImage)
+ (UIImage *)imageWithScreenContents
{
CGImageRef cgScreen = UIGetScreenImage();
if
(cgScreen) {
UIImage *result = [UIImage imageWithCGImage:cgScreen];
CGImageRelease(cgScreen);
return
result;
}
return
nil
;
}
@end