菜鸟教程小白 发表于 2022-12-13 02:26:27

ios - 如何使用 drawRect 覆盖在 UIView 子类的某些区域中获得透明度


                                            <p><p>我有一个 <code>UIView</code> 子类,其中 <code>drawRect</code> 被覆盖。绘图代码不会填满 View 的整个区域;其中一些是透明的。但是当它在屏幕上绘制时,应该透明的是黑色。 <b>我如何让它正确透明?</b></p>

<p>如果我将 <code>backgroundColor</code> 设置为 <code></code>,整个 View 就会消失。如果我将其设置为任何其他颜色,黑色区域将变为该颜色。将 <code>opaque</code> 设置为 <code>NO</code> 具有相同的效果。如果我在 <code>drawRect</code> 的开头绘制一个透明矩形,如下所示:</p>

<pre><code>[ setFill];
UIRectFill( rect );
</code></pre>

<p>...然后它又变黑了。我可以在上面的代码中使用另一种颜色,它会绘制那种颜色。如果我使我使用的颜色部分透明,我可以看到黑色透过。</p>

<p><b>更新:</b> 我的 View 可能具有透明度渐变。我尝试使用一个非常简单的 <code>UIView</code> 子类进行测试,该子类仅在其边界内绘制一个蓝色矩形,并使其他所有内容保持透明。将该 View 设置为 <code>opaque=NO</code> 会按预期呈现。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p> View 的 <code>opaque</code> 必须设置为 <code>NO</code>,<code>backgroundColor</code> 必须设置为 <code></code>。此外,使用了错误的混合模式。我们有:</p>

<pre><code>CGContextSetBlendMode(context, kCGBlendModeSourceAtop);
</code></pre>

<p>我们需要:</p>

<pre><code>CGContextSetBlendMode(context, kCGBlendModeDestinationOver);
</code></pre>

<p>绘图代码是由可以输出代码的图形工具生成的,他们的支持部门发现由于一个错误的错误而生成了错误的混合常数。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何使用 drawRect 覆盖在 UIView 子类的某些区域中获得透明度,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/16287650/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/16287650/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何使用 drawRect 覆盖在 UIView 子类的某些区域中获得透明度