菜鸟教程小白 发表于 2022-12-13 06:38:25

ios - 我需要调用 CGContextSaveGState 和 CGContextRestoreGState 吗?


                                            <p><p>即使在创建新的 imageContext 时,也要仔细检查是否需要调用 CGContextSaveGState 和 CGContextRestoreGState。</p>

<p>根据我在 Quartz Programming Guide 中阅读的内容,我不需要在下面的示例中这样做,因为我正在创建一个全新的图像上下文。</p>

<p>我在 github 上搜索了 UIGraphicsBeginImageContextWithOptions,有些人保存并恢复了上下文,而其他人则没有。 </p>

<pre><code>// Uses a circularMask on an image
class func circularImage(image: UIImage, diameter: Int) -&gt; UIImage {
    assert(diameter &gt; 0, &#34;Diameter &gt; 0 Failed \(__FUNCTION__)&#34;)

    let frame = CGRect(x: 0.0, y: 0.0, width: Double(diameter), height: Double(diameter))
    var newImage: UIImage?

    UIGraphicsBeginImageContextWithOptions(frame.size, false, UIScreen.mainScreen().scale)

    var context: CGContextRef = UIGraphicsGetCurrentContext()
    CGContextSaveGState(context)

    let imagePath: UIBezierPath = UIBezierPath(ovalInRect: frame)
    imagePath.addClip()

    image.drawInRect(frame)

    newImage = UIGraphicsGetImageFromCurrentImageContext()

    CGContextRestoreGState(context);

    UIGraphicsEndImageContext()

    return newImage!
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>不,你是对的,你不需要为你正在做的事情保存上下文状态(你可以安全地注释掉你拥有的那些)。但是,如果您想“撤消”您所做的剪辑(例如),那么这是一种方法。请注意始终将这些(保存/恢复)gstate 保持成对,它是一个堆栈,因此您必须跟踪放置在那里的任何内容。 </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 我需要调用 CGContextSaveGState 和 CGContextRestoreGState 吗?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/29867069/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/29867069/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 我需要调用 CGContextSaveGState 和 CGContextRestoreGState 吗?