zoukankan      html  css  js  c++  java
  • CGLayer和CALayer区别

    CGLayer是一种很好的缓存常绘内容的方法。注意,不要与CALayer混淆。CALayerCore Animation中更加强大、复杂的图层对象,而CGLayerCore Graphics中优化的图层,通常是通过硬件优化用于在CGContext中绘制的。

    CGContext有很多种。最常见的是视图图形上下文,由UIGraphicsCurrentContext方法生成,主要用来在屏幕上绘图。上下文也可以在位图和打印中使用。它们拥有不同的特性,包括最大分辨率、颜色详细信息以及是否可以硬件加速。

    简单地说,CGLayerCGBitmapContext类似。你可以在其中绘制内容,保存它并在以后将其结果绘入CGContext中。不同的地方在于,你可以针对特定类型的图形上下文来优化CGLayer。如果某个CGLayer是用于视图图形上下文的,它便可以直接在GPU上缓存其数据,这样可以大大提高性能。CGBitmapContext做不到这点,因为它不知晓你打算在屏幕上绘制它。

    下面的示例演示了如何缓存CGLayer。在这个示例中,它在视图被第一次绘制时缓存到一个静态变量。然后,可以在旋转上下文的同时重复印上CGLayer图层。使用了UIGraphicsPushContext,这样就可以使用UIKit在图层上下文中绘制文本,而UIGraphicsPopContext则用来返回到普通上下文。这也可以用CGContextShowTextAtPoint完成,UIKit非常易于绘制某个NSString。输出如图8-14所示。

    LayerView.mLayer

     1

     2

     3

     4

     5

     6

     7

     8

     9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

        - (void)drawRect:(CGRect)rect {

          static CGLayerRef sTextLayer = NULL;


          CGContextRef ctx = UIGraphicsGetCurrentContext();


          if (sTextLayer == NULL) {

              CGRect textBounds = CGRectMake(0, 0, 200, 100);

              sTextLayer = CGLayerCreateWithContext(ctx, 

                                                    textBounds.size

                                                    NULL);


            CGContextRef textCtx = CGLayerGetContext(sTextLayer);

            CGContextSetRGBFillColor (textCtx, 1.0, 0.0, 0.0, 1);

            UIGraphicsPushContext(textCtx);

            UIFont *font = [UIFont systemFontOfSize:13.0];

            [@"Pushing The Limits" drawInRect:textBounds 

                                     withFont:font];

            UIGraphicsPopContext();

          }


          CGContextTranslateCTM(ctx, self.bounds.size.width / 2,

                                self.bounds.size.height / 2);


          for (NSUInteger i = 0; i < 10; ++i) {

              CGContextRotateCTM(ctx, 2 * M_PI / 10);

              CGContextDrawLayerAtPoint(ctx, 

                                        CGPointZero,

                                        sTextLayer);

          }

        }

    enter image description here

  • 相关阅读:
    CodeForces Gym 100935G Board Game DFS
    CodeForces 493D Vasya and Chess 简单博弈
    CodeForces Gym 100935D Enormous Carpet 快速幂取模
    CodeForces Gym 100935E Pairs
    CodeForces Gym 100935C OCR (水
    CodeForces Gym 100935B Weird Cryptography
    HDU-敌兵布阵
    HDU-Minimum Inversion Number(最小逆序数)
    七月馒头
    非常可乐
  • 原文地址:https://www.cnblogs.com/zsw-1993/p/4879673.html
Copyright © 2011-2022 走看看