我知道每个imageView都有一个图层(我们可以使用:imageView.layer访问它。)我想使用我的imageView
图层并在其图层中添加一个subLayer:{{1} }(这是一个CAShapeLayer)我的代码不起作用,它不显示形状图层!
shapeLayer
我该如何解决这个问题?
答案 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];
}
结果我得到了这个:
答案 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,...,...)
属性时,您可能设置错误size
是0
?
答案 4 :(得分:0)
尝试为图层设置框架: 按照以下三个步骤进行操作
CALayer layerToBeAdded = [[CALayer alloc] init];
[layerToBeAdded setFrame:imgView.frame];
[imgView.layer addSublayer:layerToBeAdded];
您可以使用[imgView layer]
要将图像添加到图层,请执行此操作
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];