0

このコード ブロックを使用して、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 を追加するためです。

4

0 に答える 0