在 iOS 中截屏时我的屏幕不反光(无响应)?
My screen is not reflective (not responding)while taking screenshot in iOS?
我有一个应用程序可以实时捕获 UIWebView
的屏幕截图并将其发送到服务器。为了开始,我只是更改了视图的背景颜色并截取了它的屏幕截图。
for (int i = 0; i <15; i++)
{
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0]];
NSLog(@"Delaying");
self.view.backgroundColor=[self randomColor];
CGSize size = CGSizeMake(self.view.frame.size.width,self.view.frame.size.height);
UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);
CGRect rec = CGRectMake(0, 0,self.view.frame.size.width,self.view.frame.size.height);
[self.view drawViewHierarchyInRect:rec afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
我就是这样做的。但是屏幕没有更新,它处于一种冻结模式。它仅在使用最后一种颜色拍摄最后一张屏幕截图后更新。谁能帮我找出我哪里出错了?我需要实时截取我们的应用程序屏幕。
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0]];
会导致你的应用程序冻结,因为它会导致主线程休眠,如果你想延迟截图,请使用 GCD 的 dispatch_after 函数
for (int i = 0; i <15; i++)
{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(i * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
//body of your forloop goes here
});
}
如果您不想立即截取初始屏幕截图,可能需要将延迟增加 i+1
我有一个应用程序可以实时捕获 UIWebView
的屏幕截图并将其发送到服务器。为了开始,我只是更改了视图的背景颜色并截取了它的屏幕截图。
for (int i = 0; i <15; i++)
{
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0]];
NSLog(@"Delaying");
self.view.backgroundColor=[self randomColor];
CGSize size = CGSizeMake(self.view.frame.size.width,self.view.frame.size.height);
UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);
CGRect rec = CGRectMake(0, 0,self.view.frame.size.width,self.view.frame.size.height);
[self.view drawViewHierarchyInRect:rec afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
我就是这样做的。但是屏幕没有更新,它处于一种冻结模式。它仅在使用最后一种颜色拍摄最后一张屏幕截图后更新。谁能帮我找出我哪里出错了?我需要实时截取我们的应用程序屏幕。
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0]];
会导致你的应用程序冻结,因为它会导致主线程休眠,如果你想延迟截图,请使用 GCD 的 dispatch_after 函数
for (int i = 0; i <15; i++)
{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(i * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
//body of your forloop goes here
});
}
如果您不想立即截取初始屏幕截图,可能需要将延迟增加 i+1