このコード ブロックを使用して、UINavigationController のビューのスナップショットを取得します。
@implementation UIView (Snapshot)
- (UIImage*)snapshot
{
NSTimeInterval t0 = [[NSProcessInfo processInfo] systemUptime];
UIGraphicsBeginImageContextWithOptions(self.frame.size, self.opaque, [[UIScreen mainScreen] scale]);
if([self isKindOfClass:[UIScrollView class]]){
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(ctx, 0, -((UIScrollView*)self).contentOffset.y);
}
[self.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *snapshotImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSTimeInterval t1 = [[NSProcessInfo processInfo] systemUptime];
NSLog(@"time cost: %lf", t1 - t0);
return snapshotImage;
}
@end
1、
JASidePanelController *sidePanelController = //...
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:sidePanelController];
[navController.view snapshot]; // **cost 1 seconds**
2、
JASidePanelController *sidePanelController = //...
UINavigationController *navController = //...;
sidePanelController.centerPanel = navController;
[navController.view snapshot]; // **cost 0.1 seconds**
パフォーマンスを向上させる方法はありますか?
私は理由を見つけました:それは、JASideController が (void)styleContainer:(UIView *)container animate:(BOOL)animate duration:(NSTimeInterval)duration の view.layer に UIBezierPath を追加するためです。