0

我正在尝试使用renderInContext:UIGraphicsGetCurrentContext(). 我正在掩盖一个白色视图,它是灰色视图的子视图。这对显示效果很好:我最终得到了一个灰色背景下的白色形状,但是当我渲染蒙版时,我看到的只是结果图像中的白色。

UIView 子类中的掩码

- (void)drawRect:(CGRect)rect
{
        CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
        CGMutablePathRef patheToMask = CGPathCreateMutable();
        CGRect scrollMaskRect = CGRectMake(30, 30, 100, 100);
        UIBezierPath *scrollMask = [UIBezierPath bezierPathWithRoundedRect:scrollMaskRect cornerRadius:30];
        CGPathAddPath(patheToMask, nil, scrollMask.CGPath);
        [maskLayer setPath:patheToMask];
        CGPathRelease(patheToMask);
        self.layer.mask = maskLayer;
}

渲染代码

-(void)renderImage {
    CGSize renderSize = CGSizeMake(masterView.frame.size.width, masterView.frame.size.height);
    UIGraphicsBeginImageContext(renderSize);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);
    CGContextConcatCTM(context, [[masterView layer] affineTransform]);
    [[masterView layer] renderInContext:UIGraphicsGetCurrentContext()];
    renderedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    CGContextRestoreGState(context);
    UIImageWriteToSavedPhotosAlbum(renderedImage, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
    masterView.transform = CGAffineTransformIdentity;
}

这是项目http://owolf.net/uploads/StackOverflow/MaskWeirdness.zip

4

1 回答 1

0

根据文档, renderInContext:UIGraphicsGetCurrentContext() 不支持屏蔽。

https://developer.apple.com/library/mac/#documentation/graphicsimaging/reference/CALayer_class/Introduction/Introduction.html

从文档:

重要提示:此方法的 OS X v10.5 实现不支持整个 Core Animation 合成模型。QCCompositionLayer、CAOpenGLLayer 和 QTMovieLayer 图层不会被渲染。此外,不会渲染使用 3D 变换的图层,也不会渲染指定背景过滤器、过滤器、合成过滤器或遮罩值的图层。OS X 的未来版本可能会增加对渲染这些层和属性的支持。

于 2013-05-11T02:30:34.640 回答