Iphone 如何使用CGLayer在屏幕外绘制多幅图像

Iphone 如何使用CGLayer在屏幕外绘制多幅图像,iphone,core-graphics,cglayer,Iphone,Core Graphics,Cglayer,最终,我正在开发一个用于iPhone的框模糊功能 该函数将获取一个UIImage并绘制透明副本,首先是侧面,然后获取该图像并在上面和下面绘制透明副本,返回一个非常模糊的图像 阅读,它建议使用CGLayers进行此类操作 指南中的示例代码对我来说有点难理解,因此我希望有人能给我展示一个非常简单的示例,将UIImage转换为CGLayer,然后我将绘制副本并作为UIImage返回 如果值是硬编码的(为了简单起见),那就可以了。这只是为了我的头脑,不是为了生产代码 UIImage *myImage =

最终,我正在开发一个用于iPhone的框模糊功能

该函数将获取一个UIImage并绘制透明副本,首先是侧面,然后获取该图像并在上面和下面绘制透明副本,返回一个非常模糊的图像

阅读,它建议使用CGLayers进行此类操作

指南中的示例代码对我来说有点难理解,因此我希望有人能给我展示一个非常简单的示例,将UIImage转换为CGLayer,然后我将绘制副本并作为UIImage返回

如果值是硬编码的(为了简单起见),那就可以了。这只是为了我的头脑,不是为了生产代码

UIImage *myImage = …;
CGLayerRef layer = CGLayerCreateWithContext(destinationContext, myImage.size, /*auxiliaryInfo*/ NULL);
if (layer) {
    CGContextRef layerContext = CGLayerGetContext(layer);
    CGContextDrawImage(layerContext, (CGRect){ CGPointZero, myImage.size }, myImage.CGImage);

    //Use CGContextDrawLayerAtPoint or CGContextDrawLayerInRect as many times as necessary. Whichever function you choose, be sure to pass destinationContext to it—you can't draw the layer into itself!

    CFRelease(layer);
}
从技术上讲,这是我有史以来第一个iPhone代码(我只在Mac上编程),所以要小心。不过,我以前使用过CGLayer,据我所知,Quartz在iPhone上也没有什么不同

…并作为UIImage返回


由于从未使用过UIKit,我不知道该如何完成这一部分。

destinationContext从何而来?我是否要声明一个新的:CGContextRef destinationContext;目标上下文是要将层绘制到其中的上下文。假设您不是自己创建目标上下文,您可以通过调用
UIGraphicsGetCurrentContext
从上下文堆栈中获取它。当然,如果您计划创建UIImage而不是在视图中绘制,您可能会自己创建上下文。您可以创建一个位图上下文,在其中绘制,然后使用它的缓冲区创建一个CGImage来创建UIImage。(可能有一种更简单的方法)Hello@PeterHosey,我从UIBezeirPath获取了一个图像,我想在CGLayer上绘制它,我尝试了你的代码,所以当我从屏幕底部绘制一条线时,它是从左上到右下绘制的。你能告诉我为什么会这样吗happening@Ranjit:你应该单独问一个问题。@Joe-如果你有什么要回答的,请回答。这个网站的目的不是为了获得任意的分数,而是为了帮助他人。分数仅仅是积极行为的一种强化。仅仅因为有人没有对你的答案投票并不意味着你在写答案上浪费了时间。至少,在回答这个问题的过程中,你可能学到了一些东西。@Joe如果你想帮忙,帮帮我。