给界面上任何控件截图并保存为PNG的方法

本文详细介绍了如何使用Objective-C在iOS设备上通过私有函数截取屏幕图像,包括图像的获取、保存及注意事项。适用于iOS开发人员。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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!" );
         }
     }
}


在真机上可以用以下私有函数截屏,不过苹果会reject用了这个函数的软件。

?
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

转载于:https://www.cnblogs.com/martin1009/archive/2012/02/20/2360303.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值