以编程方式绘制带有阿尔法通道的精灵套件的精灵



我正在尝试为精灵套件制作一个应用程序的原型,如果能够以编程方式绘制我需要的精灵,然后稍后制作实际精灵,对我来说将是有利的。 我做了一个粗略的圆圈,当我使用 renderInContext 转换为 UIImage(或 CGImage)时,它以黑色背景显示在精灵视图上,显然忽略了 alpha 通道。 如果我将 UIImage 作为 UIImageView 添加到常规视图中,则 alpha 通道将正确呈现。 我想知道我做错了什么,或者是否有解决方法。

float rockSize = 100;
UIView* drawingView = [[UIView alloc] initWithFrame:CGRectMake(0,0,100,100)];
drawingView.backgroundColor = [UIColor clearColor];
CALayer* circleLayer = [CALayer layer];
circleLayer.frame = CGRectMake(0,0,rockSize,rockSize);
circleLayer.backgroundColor = [Utils getTiledColorFromColor:[UIColor purpleColor]].CGColor;
circleLayer.cornerRadius = rockSize/2.0;
circleLayer.masksToBounds = YES;
[drawingView.layer addSublayer:circleLayer];
UIGraphicsBeginImageContextWithOptions(CGSizeMake(rockSize, rockSize), NO, [UIScreen mainScreen].scale);
CGContextSetFillColorWithColor(UIGraphicsGetCurrentContext(), [UIColor clearColor].CGColor);
CGContextFillRect(UIGraphicsGetCurrentContext(), CGRectMake(0,0,rockSize,rockSize));
[drawingView.layer renderInContext: UIGraphicsGetCurrentContext()];
UIImage *layerImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
SKSpriteNode *rockNode = [SKSpriteNode spriteNodeWithTexture:[SKTexture textureWithImage:layerImage]];
CGPoint position = CGPointMake(200,100);
rockNode.position = position;
[self addChild:rockNode];
当您

看到黑色视图背景时,这种影响经常发生在视图opaque属性错误地设置为 YES 而实际上不透明时(通常这种情况发生在以编程方式创建视图时,不透明 = YES 是默认值)。

例如,您可以通过将opaque设置为 NO 来解决此问题。

最新更新