【问题标题】:iPhone: How do I add layers to UIView's root layer to display an image with the content property?iPhone:如何将图层添加到 UIView 的根图层以显示具有内容属性的图像?
【发布时间】:2012-09-14 01:43:20
【问题描述】:

根据 Mac Dev Center 文档,您应该能够设置 CALayer 的 contents 属性并自动渲染。但是,我仍然无法通过稍后将子层添加到 UIView 的根目录来显示简单的图像。我尝试了多种不同的变体;这是我目前所拥有的:

(注意:我知道还有其他渲染图像的方法;出于我的目的,我想使用 CALayer 来处理我将要讨论的一些更复杂的东西)。

(在 ViewController 的 viewDidDisplay() 中):

 CALayer *theLayer = [CALayer layer];
 [[[self view] layer] addSublayer:theLayer];
 theLayer.contents = (id)[[UIImage imageNamed:@"mypic.png"] CGImage];
 theLayer.contentsRect = CGRectMake(0.0f, 0.0f, 300.0f, 300.0f);
 theLayer.bounds = CGRectMake(0.0f, 0.0f, 300.0f, 400.0f);

有人知道我做错了什么吗?

谢谢!

【问题讨论】:

  • 谢谢本 - 你明白了。我的问题是 contentsRect 太大了——没有意识到它是一个单位坐标空间。有趣的是,图像被放置在高处和左侧(我只看到它的右下角 1/4) - 我必须调整位置以使图像的左上角位于右上角的屏幕。谢谢!

标签: iphone


【解决方案1】:

您可以将图像加载到 UIImageView 中,该 UIImageView 是从 UIView 继承而来的,因此具有自己的 layer 属性。

UIImageView *imgView = [[UIImageView alloc] initWithFrame:frame];
imgView.image = [UIImage imageNamed:@"mypic.png"];

[[[self view] layer] addSublayer:[imgView layer]];
[imgView release];

【讨论】:

    【解决方案2】:

    你不需要设置contentsRect(如果你这样做,它应该在单位坐标空间,可能只是CGRectMake(0, 0, 1.0, 1.0).

    您可能想要设置layerposition 属性。

    【讨论】:

      【解决方案3】:

      您需要创建两个 CALayer 。这是在 CALayer 中显示图像的完美方式。

      CALayer *pulseLayer_ = [[CALayer layer] retain];
      
      pulseLayer_.backgroundColor = [[UIColor whiteColor] CGColor];
      pulseLayer_.bounds = CGRectMake(0., 0., 80., 80.);
      pulseLayer_.cornerRadius = 12.;
      pulseLayer_.position = self.view.center;
      
      [self.view.layer addSublayer:pulseLayer_];
      
      
      CALayer *imageLayer = [CALayer layer];
      
      imageLayer.frame = pulseLayer_.bounds;
      imageLayer.cornerRadius = 10.0;
      imageLayer.contents = (id) [UIImage imageNamed:@"jacklogo.png"].CGImage;
      imageLayer.masksToBounds = YES;
      
      [pulseLayer_ addSublayer:imageLayer];
      
      [pulseLayer_ setNeedsDisplay];
      

      我认为它可以解决您的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-10
        • 2012-08-12
        • 1970-01-01
        • 1970-01-01
        • 2017-10-17
        相关资源
        最近更新 更多