代码之家  ›  专栏  ›  技术社区  ›  christo16

将文本添加到日历

  •  28
  • christo16  · 技术社区  · 15 年前

    可以加一个吗 UILabel 到A CALayer 不进行子类化和绘制 drawInContext: ?

    谢谢!

    5 回复  |  直到 6 年前
        1
  •  39
  •   Deepak Danduprolu    15 年前

    我认为您不能向calayer对象添加uiview子类。但是,如果要在calayer对象上绘制文本,可以使用nsstring uikit中提供的绘图功能来完成。 additions 如下图所示。虽然我的代码是在代理的drawlayer:incontext方法中完成的,但是子类的drawincontext:method中也可以使用相同的方法。您是否希望利用任何特定的uilabel功能?

    - (void) drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
      CGContextSetFillColorWithColor(ctx, [[UIColor darkTextColor] CGColor]);
    
      UIGraphicsPushContext(ctx);
      /*[word drawInRect:layer.bounds 
              withFont:[UIFont systemFontOfSize:32] 
         lineBreakMode:UILineBreakModeWordWrap 
             alignment:UITextAlignmentCenter];*/
    
      [word drawAtPoint:CGPointMake(30.0f, 30.0f) 
               forWidth:200.0f 
               withFont:[UIFont boldSystemFontOfSize:32] 
          lineBreakMode:UILineBreakModeClip];
    
      UIGraphicsPopContext();
    }
    
        2
  •  143
  •   Sangram Shivankar Wostein    6 年前
    CATextLayer *label = [[CATextLayer alloc] init];
    [label setFont:@"Helvetica-Bold"];
    [label setFontSize:20];  
    [label setFrame:validFrame];
    [label setString:@"Hello"];
    [label setAlignmentMode:kCAAlignmentCenter];
    [label setForegroundColor:[[UIColor whiteColor] CGColor]];
    [layer addSublayer:label];
    
    [label release];
    
        3
  •  4
  •   Otávio    10 年前

    你的uilabel后面已经有一个calayer了。如果要组合多个日历,只需将uilabel的层添加为其中一个日历的子层(通过使用 layer 财产)。

    如果是在你想要的图层上直接绘制文本,那么Deepak指向的uikit nsstring添加就是一条路。例如,在实际操作中, Core Plot framework 有一个独立于Mac/iPhone平台的Calayer子类,可以进行文本渲染, CPTextLayer .

        4
  •  2
  •   Alec Sloman    14 年前

    添加一个catextlayer作为子层,并设置string属性。这将是最简单的,您可以轻松地使用布局管理器使其非常通用。

        5
  •  -2
  •   Bartłomiej Semańczyk    9 年前

    如果要添加其他子图层,请始终记住删除以前的子图层,以防止复制视图:

    if let sublayers = layer.sublayers {
        for sublayer in sublayers {
            sublayer.removeFromSuperlayer()
        }
    }