【问题标题】:Set "opacity" of a CGLayer before draw?在绘制之前设置 CGLayer 的“不透明度”?
【发布时间】:2011-01-02 06:00:17
【问题描述】:

我有 UIView 子类 - 实际上是一个拼图 - 在 initWithFrame 初始化了 2 个不同的 CGLayer。

在 drawRect 中,我必须混合这两层,最上面的应该有 可变 alpha,具体取决于游戏逻辑。

执行此操作的最佳(性能优化程度最高)方法是什么?是否有任何 CGLayer 或 CGContext 函数可以在绘制之前设置一些 alpha?

【问题讨论】:

    标签: iphone xcode alpha blend cglayer


    【解决方案1】:

    设置图层的-opacity。请记住,图层的-opaque 设置必须为NO。默认值为 NO,但出于性能原因,它通常设置为 YES。

    如果您已经在使用-drawInContext:,那么您可以尝试使用CGContextSetAlpha()。不过,一般来说,您不会同时使用-drawRect: 和图层。您通常让视图或图层来绘制。

    【讨论】:

    • 你的意思是我应该创建一个独立的例如。 -(void)renderView 方法,并在那里实现图层绘图?那么 [puzzlePiece setNeedDisplay] 可以用一个简单的 [puzzlePiece renderView] 代替吗?
    • 这听起来很对,如果您每次都需要渲染视图的所有部分。否则,当您的模型类(数据)更改时,我只会重新渲染您需要的图层。没有理由仅仅因为其他图层需要重绘而重绘图层。
    • '课程。拼图块实际上是 PuzzlePiece:UIView 类的分配/addSubview-ed 实例,因此只有最近用户操作的块才能获得重绘消息(上面的渲染视图“意味着”渲染拼图视图)。
    • 嘿@RobNapier,我的tableCell 上有一个图像,点击单元格时,我打开了drawingView 并将图像绘制到Cglayer 中并在drawingView 上显示。现在无论我画什么都应该独立于那个图像。这样每当我撤消和重做时,该单元格图像都不会受到影响。我们怎样才能做到这一点?
    • 我不太明白你在这里的意思,但它看起来像一个单独的问题,而不是对这个问题的评论。撤消的一般答案是您需要跟踪图像堆栈或(通常更好)用于绘制图像的指令,并上下移动堆栈。请参阅 NSUndoManager 以管理该堆栈。
    猜你喜欢
    • 2011-04-27
    • 2016-05-12
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    相关资源
    最近更新 更多