在我的应用中,我使用的是截图方法。在我的iPad 2上执行此方法的速度非常快(约130毫秒)。但是在新的iPad上(当然由于最高的分辨率和相同的CPU),它需要700毫秒!有没有办法优化我的方法?也许有办法直接使用显卡吗?
这是我的截图方法:
- (UIImage *)image {
CGSize imageSize = self.bounds.size;
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) UIGraphicsBeginImageContextWithOptions(imageSize, NO, [UIScreen mainScreen].scale);
else UIGraphicsBeginImageContext(imageSize);
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);
[[self layer] renderInContext:context];
CGContextRestoreGState(context);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
感谢您的帮助。
答案 0 :(得分:3)
我认为是Flipboard的开发者在播客上谈论这个问题。这是iPad 3的一个真正问题,因为它们的像素增加了四倍。
他正在做的是在后台提前截取屏幕截图,而不是在用户发起操作时 - 在用户“翻转”页面的情况下。
我不知道这对你的情况是否有帮助,但对于很多情况来说这肯定是一种可行的方法。
答案 1 :(得分:0)
这可能适用于您的应用,也可能不适用,但一种选择是缩小屏幕截图,例如:将0.5作为比例因子传递给 UIGraphicsBeginImageContextWithOptions 。快4倍,但权衡是细节/分辨率的损失。