【问题标题】:add subLayer to a imageView.layer将 subLayer 添加到 imageView.layer
【发布时间】:2012-01-27 16:30:40
【问题描述】:

我知道每个 imageViews 都有一个图层(我们可以使用 :imageView.layer 访问它)。我想使用我的imageView 的图层并在其图层中添加一个子图层:shapeLayer(即a CAShapeLayer) 我的代码不起作用,它不显示形状层!

- (void)viewDidLoad 
{
   imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
   [self.view addSubview:imageView];
}

- (void)anotherMethod
{
   [imageView.layer addSublayer:shapeLayer];
}

请问我该如何解决?

【问题讨论】:

    标签: iphone objective-c cocoa-touch uiimageview calayer


    【解决方案1】:

    试试这个:

    [outputImage.layer insertSublayer:shapeLayer atIndex:0];
    

    【讨论】:

      【解决方案2】:

      我通过在UIImageView 下方使用UIView 并将图层设置为UIView 解决了类似的问题。当您在索引 0 处向UIImageView 添加图层时,您的图像将不可见。

      我有一个名为photoViewUIView。它有一个UIImageView 类的子视图,具有相同的边界并且具有clear 背景颜色。我将gradientLayer 添加到photoView

      - (void)viewDidLoad
      {
          [super viewDidLoad];
      
          // Adding gradient background to UIImageView
          CAGradientLayer *gradientLayer = [CAGradientLayer layer];
          gradientLayer.frame = self.photoImageView.bounds;
          gradientLayer.colors = @[(id)[UIColor customUltraLightGrayColor].CGColor, (id)[UIColor customUltraLightGrayColor].CGColor, (id)[UIColor customDarkGrayColor].CGColor];
          gradientLayer.locations = @[@(0.0), @(0.6)];
          [self.photoView.layer insertSublayer:gradientLayer atIndex:0];
      }
      

      结果我得到了这个:

      【讨论】:

        【解决方案3】:

        这可能有几个原因,例如:

        • 您是 #import <QuartzCore/QuartzCore.h>(和/或 CoreGraphics/CoreGraphics.h>,具体取决于您在其余代码中的操作)吗?

        • 在初始化不在可见框架内的CALayer(如CGRectMake(5000,5000,...,...))或size 属性之一是0 时,您可能设置了错误的CGRectMake

        【讨论】:

          【解决方案4】:

          尝试设置图层的框架: 遵循三个步骤

          CALayer layerToBeAdded = [[CALayer alloc] init];
          [layerToBeAdded setFrame:imgView.frame];
          [imgView.layer addSublayer:layerToBeAdded];
          

          不用分配CALayer,你可以使用[imgView layer]

          然后像这样将图像添加到图层中

          layerToBeAdded.contents = (id)imgXYZ.CGImage; 
          

          【讨论】:

            【解决方案5】:

            假设你说的只是一个 UIImageView (imageView == outputImage ???)

            //in another method:
            {
                [imageView.layer addSublayer:shapeLayer]; //Where is outputImage initialized?
            }
            

            【讨论】:

            • 我认为代码是正确的。形状层是否可能为空/不存在(宽度或高度 == 0)?试试[self.view.layer addSublayer:shapeLayer]。有什么事吗?
            • 你是对的,当我做 [self.view.layer addSublayer:shapeLayer] 什么也没发生。那请问我该如何解决呢?
            【解决方案6】:

            这里有一个解决方案:

            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
              • 2013-03-29
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-02-14
              • 1970-01-01
              • 2020-08-27
              • 1970-01-01
              相关资源
              最近更新 更多