2009-08-17 3 views
2

궁극적으로 iPhone에서 사용하기 위해 상자 흐림 기능을 사용하고 있습니다.CGLayer를 사용하여 여러 이미지를 화면에 그리는 방법

이 함수는 UIImage를 사용하여 투명한 복사본을 처음에는 양면으로 그 다음 그 이미지를 가져 와서 위와 아래의 투명한 복사본을 그려 멋지게 흐린 이미지를 반환합니다.

Drawing with Quartz 2D Programming Guide을 보면 CGLayers를 사용하는 것이 좋습니다. 나를 이해하는

가이드의 예제 코드는 작은 조밀 한, 그래서 누군가가 나에게 있는 UIImage을 복용하고 난 후 그릴 것이라는 CGLayer로 변환의 매우 간단한 예를 보여 드리고자합니다 복사본은 UIImage으로 반송하십시오.

(단순화하기 위해) 값이 하드 코딩 된 경우 문제가 없습니다. 이것은 생산 코드가 아닌 내 머리를 감싸는 것입니다.

+0

@Joe - 답변 할 항목이 있으면 알려주세요. 이 사이트의 요점은 임의의 포인트를 얻는 것이 아니라 다른 사람들을 돕는 것입니다. 점수는 단지 긍정적 인 행동을 강화하는 역할을합니다. 누군가가 당신의 대답에 투표하지 않는다고해서 당신이 그것을 쓰는 데 낭비한다는 것을 의미하지는 않습니다. 최소한 질문에 대답하는 과정에서 뭔가를 배웠을 것입니다. –

+0

@Joe 도움을 받으려면 도움을 받으십시오. – willc2

답변

2
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을 사용한 적이없는이 부분을 어떻게 수행해야할지 모르겠습니다.

+0

destinationContext의 출처는 어디입니까? 나는 다음과 같이 새로운 것을 선언하나요? CGContextRef destinationContext; – willc2

+0

대상 컨텍스트는 레이어를 그릴 컨텍스트입니다. 목적지 컨텍스트를 직접 생성하지 않는다고 가정하면 'UIGraphicsGetCurrentContext'를 호출하여 컨텍스트 스택에서 얻을 수 있습니다. –

+0

물론, 뷰를 그리는 대신 UIImage를 만들 계획이라면, 아마도 상황을 직접 작성하게 될 것입니다. 비트 맵 컨텍스트를 만들고 그 안에 그려 넣은 다음 버퍼를 사용하여 UIImage를 만드는 CGImage를 만듭니다. (더 쉬운 방법이있을 수 있습니다.) –