将subLayer添加到imageView.layer

时间:2011-12-25 18:23:05

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

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

shapeLayer

我该如何解决这个问题?

6 个答案:

答案 0 :(得分:3)

试试这个:

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

答案 1 :(得分:1)

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

我有UIView名为photoView。它有一个类UIImageView的子视图,它具有相同的边界并具有清晰背景颜色。我向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];
}

结果我得到了这个:

Gradient background of UIImageView

答案 2 :(得分:0)

假设您只谈论一个UIImageView(imageView == outputImage ???)

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

答案 3 :(得分:0)

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

  • #import <QuartzCore/QuartzCore.h>(和/或CoreGraphics/CoreGraphics.h>取决于您在其余代码中所做的工作了吗?

  • 初始化不在可见框内的CGRectMake(如CALayer)或其中一个CGRectMake(5000,5000,...,...)属性时,您可能设置错误size0

答案 4 :(得分:0)

尝试为图层设置框架: 按照以下三个步骤进行操作

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

您可以使用[imgView layer]

而不是分配CALayer

要将图像添加到图层,请执行此操作

layerToBeAdded.contents = (id)imgXYZ.CGImage; 

答案 5 :(得分:0)

这是一个解决方案:

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];