为什么屏幕截图中没有添加子图层?

时间:2012-10-24 13:15:05

标签: ios

我正在尝试追踪一些iPad应用程序的iOS代码中的错误。在我们的一个视图中,我们添加了子图层以获得阴影,并确保视图的底部具有圆角。这是我们添加子图层的代码:

    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds
                                                   byRoundingCorners:(UIRectCornerBottomLeft|UIRectCornerBottomRight)
                                                         cornerRadii:CGSizeMake(12.0f, 12.0f)];

    // Create the shadow layer
    shadowLayer = [CAShapeLayer layer];
    [shadowLayer setFrame:self.bounds];
    [shadowLayer setMasksToBounds:NO];
    [shadowLayer setShadowPath:maskPath.CGPath];
    shadowLayer.shadowColor = [UIColor blackColor].CGColor;
    shadowLayer.shadowOffset = CGSizeMake(0.0f, 0.0f);
    shadowLayer.shadowOpacity = 0.5f;
    shadowLayer.shadowRadius = 6.0f;

    roundedLayer = [CALayer layer];
    [roundedLayer setFrame:self.bounds];
    [roundedLayer setBackgroundColor:[UIColor colorFromHex:@"#e4ecef"].CGColor];

    [self.layer insertSublayer:shadowLayer atIndex:0];

    // Add inner view (since we're rounding corners, parent view can't mask to bounds b/c of shadow - need extra view)
    maskLayer = [CAShapeLayer layer];
    maskLayer.frame = self.bounds;
    maskLayer.path = maskPath.CGPath;
    innerView = [[UIView alloc] initWithFrame:self.bounds];
    innerView.backgroundColor = [UIColor whiteColor];
    innerView.layer.mask = maskLayer;
    [self addSubview:innerView];

它在iPad的屏幕上显示正常,但我想以编程方式截取屏幕截图。我用这种方法为UIView添加了一个类别:

- (UIImage*)screenshot {
    UIGraphicsBeginImageContext(self.frame.size);
    [self.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);
    return viewImage;
}

当我查看拍摄的屏幕截图时,它的视角后面不再有圆角或阴影。他们为什么不出现?

1 个答案:

答案 0 :(得分:2)

在此处找到解释:CALayer renderInContext

  

此外,使用3D变换的图层不会渲染,也不会渲染   指定backgroundFilters,filters,compositingFilter或的图层   掩码值。

看起来某些子图层无法由renderInContext处理,这就是为什么它们没有显示在我的屏幕截图中。

相关问题