我一直在尝试使用Quartz在图层上写一个图像,但我看到的只是完全空的图像...这是代码
CGContextRef context = UIGraphicsGetCurrentContext();
CGRect backRect = CGRectMake (0, 0, image.size.width, image.size.height);
CGLayerRef backLayer = CGLayerCreateWithContext (context, image.size, NULL);
CGContextRef backContext = CGLayerGetContext (backLayer);
CGContextDrawImage(backContext, backRect, image.CGImage);
你能告诉我这段代码有什么问题吗?
图像是用相机拍摄的UIImage。
是的,图像就在那里。如果我用
替换上面的代码UIGraphicsBeginImageContext(image.size);
[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)];
我看到了图像。但是我必须把它放在一个层中,因为它是一个精灵。
答案 0 :(得分:1)
你并没有真正对你创建的图层做任何事情。您应该使用CGContextDrawLayerAtPoint()或CGContextDrawLayerInRect()或...将其添加到当前上下文中。
您可以添加以下内容:
CGContextDrawLayerInRect(context, backRect, backLayer);
或
CGContextDrawLayerAtPoint(context,CGPointZero,backLayer);
答案 1 :(得分:1)
请注意,CGLayer与CALayer不同。 CALayer可以通过Core Animation进行动画处理,其中CGLayer只是方便将静态2-D核心图形绘图组合在一起。因为你把它称为精灵,我假设你想要围绕这个动画,所以CALayer将是更好的选择。
我建议您阅读Core Animation Programming Guide,尤其是section on providing layer content。 CALayers在动画方面会给你非常好的表现,因为它们是GPU加速的,不需要每帧重绘。 Core Graphics不会为您提供接近动画可接受性能的任何地方,因为重绘是一项昂贵的操作。
答案 2 :(得分:0)