【问题标题】:Iphone How to make context background transparent?Iphone 如何使上下文背景透明?
【发布时间】:2012-01-20 08:40:53
【问题描述】:
CALayer *sublayer = [CALayer layer];
/*sublayer.backgroundColor = [UIColor blueColor].CGColor;
sublayer.shadowOffset = CGSizeMake(0, 3);
sublayer.shadowRadius = 5.0;
sublayer.shadowColor = [UIColor blackColor].CGColor;
sublayer.shadowOpacity = 0.8;*/
sublayer.frame = CGRectMake(30, 100, 256, 256);
sublayer.contents = (id)[[UIImage imageNamed:@"moon.png"] CGImage];
[self.view.layer addSublayer:sublayer];
//self.view.backgroundColor = [UIColor blackColor];

//add moon mask
UIGraphicsBeginImageContextWithOptions(CGSizeMake(400, 400), YES, 1);
CGContextRef contextRef = UIGraphicsGetCurrentContext();
CGContextClearRect(contextRef, CGRectMake(0, 0, 400, 400));
CGContextSetRGBFillColor(contextRef, 1, 1, 1, 0.8);
CGContextSetRGBStrokeColor(contextRef, 0, 0, 0, 0.5);
CGRect ellipse = CGRectMake(50, 50, 128, 128);
CGContextAddEllipseInRect(contextRef, ellipse);
CGContextFillEllipseInRect(contextRef, ellipse);

CALayer* sublayer2 = [CALayer layer];
sublayer2.frame = CGRectMake(30, 100, 256, 256);
sublayer2.backgroundColor = [UIColor clearColor].CGColor;
sublayer2.contents = (id)[UIGraphicsGetImageFromCurrentImageContext() CGImage];
[self.view.layer addSublayer:sublayer2];

这是我到目前为止编写的代码。首先我用月亮图像制作图层。然后我添加了带有自定义绘图的第二层,它应该覆盖月球的一部分。然而 contextRef 将其背景渲染为黑色,因此当我放置第二层时,第一层是不可见的。有什么办法可以解决这个问题吗?更好的是,有没有更好的方法以编程方式制作自定义绘图并将其添加到图层?

【问题讨论】:

    标签: ios iphone drawing calayer cgcontext


    【解决方案1】:
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(400, 400), NO, 1);
    

    将此参数设置为 NO 可以解决我的问题。

    【讨论】:

    • 如果您想知道,该参数是opaque 值:developer.apple.com/reference/uikit/…
    • 所有这一切都是删除我绘图的透明部分(按钮的圆角)并最终用与按钮相同的颜色填充背景,基本上使它成为一个方形按钮,它不是t 我想要的。
    猜你喜欢
    • 1970-01-01
    • 2016-12-02
    • 2017-02-01
    • 2013-04-12
    • 1970-01-01
    • 2015-08-06
    • 2011-09-17
    • 2011-02-18
    • 2016-10-24
    相关资源
    最近更新 更多