小编ant*_*ons的帖子

CAShapeLayer作为CALayer的面具:圆角被拉伸

我想掩盖一个CALayerwith CAShapeLayer,因为形状的变化可以动画.

当我使用它CAShapeLayer作为面具时,圆角被拉伸.但是,如果我采用相同的形状,NSImage使用它创建一个,并使用图像来掩盖我的CALayer,圆角是完美的.

左边是NSImage的圆角,右边是CAShapeLayer

这是我用来掩盖图层的代码(你也可以下载整个示例项目):

CGColorRef backgroundColor = CGColorCreateGenericRGB(0.0, 0.0, 0.0, 1.0f);

[self.window.contentView setLayer:[CALayer layer]];
[self.window.contentView setWantsLayer:YES];
[[self.window.contentView layer] setFrame:[self.window.contentView frame]];


CALayer *imageBasedMaskLayer = [CALayer layer];
[imageBasedMaskLayer setContents:(id)[[self maskWithSize:NSMakeSize(50, 50)] CGImageForProposedRect:NULL context:nil hints:nil]];
[imageBasedMaskLayer setFrame:CGRectMake(0, 0, 50, 50)];

CALayer *layerWithImageBasedMaskLayer = [CALayer layer];
[layerWithImageBasedMaskLayer setBackgroundColor:backgroundColor];
[layerWithImageBasedMaskLayer setMask:imageBasedMaskLayer];


CAShapeLayer *shapeBasedMaskLayer = [CAShapeLayer layer];
CGPathRef maskShape = [self newMaskPathWithFrame:NSMakeRect(0, 0, 50, 50)];
[shapeBasedMaskLayer setPath:maskShape];
[shapeBasedMaskLayer setFillRule:kCAFillRuleEvenOdd];
CGPathRelease(maskShape);
[shapeBasedMaskLayer setFrame:CGRectMake(0, 0, 50, 50)]; …
Run Code Online (Sandbox Code Playgroud)

core-animation core-graphics objective-c

7
推荐指数
1
解决办法
3479
查看次数