2011-05-10 4 views
0

를 사용하여 배경 이미지를 그립니다 나는 아래의 코드를 사용하여 설정 배경 이미지를 가지고있는 UIView에 그리려 :CGContextDrawImage

- (void)setBackgroundImageFromData:(NSData *)imageData { 
    UIImage *image = [UIImage imageWithData:imageData]; 

    int width = image.size.width; 
    int height = image.size.height; 
    CGSize size = CGSizeMake(width, height); 

    CGRect imageRect = CGRectMake(0, 0, width, height); 

    UIGraphicsBeginImageContext(size); 
    CGContextRef currentContext = UIGraphicsGetCurrentContext(); 

    CGContextTranslateCTM(currentContext, 0, height); 
    CGContextScaleCTM(currentContext, 1.0, -1.0); 

    CGContextDrawImage(currentContext, imageRect, image.CGImage); 

    UIGraphicsEndImageContext(); 
} 

초기 뷰가 애플의 GLPaint 예제의 코드를 사용하여 만들어집니다. 내 인생에서 그 배경 이미지는 보여지지 않습니다. 내가 뭘 놓치고 있니?

감사합니다.

답변

0

UIImage 및 imageRect를 성공적으로 만듭니다. 그런 다음 이미지 컨텍스트를 시작하여 컨텍스트에 이미지를 그리고 컨텍스트를 종료합니다. 문제는 컨텍스트에 아무것도 수행하지 않고 컨텍스트가 만료되도록 허용한다는 것입니다.

UIKit에서 새로운 비주얼을 위쪽으로 밀지 않으면 그릴 때까지 기다릴 수 있습니다. 내부 메커니즘은 이미지를 캐시하고이를 사용하여 일반적인 60fps로 화면을 그리거나 화면을 다시 그립니다.

사용자 정의 UIView 하위 클래스 인 경우 UIImage를 계속 유지하고 drawRect:의 일부로 합성하려고합니다. setNeedsRedraw을 호출하여 UIView의 내용을 변경 한 것으로 설정할 수 있습니다. 그러면 나중에 어느 시점에서 내용을 다시 그릴 것인지 묻는 메시지가 나타납니다.

사용자 정의 하위 클래스가 아닌 경우 가장 쉬운 방법은이보기를 외부보기로 랩핑하고 UIImageView를 추가하여 UIImage를 설정할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 컨텍스트를 어떻게 설정할 수 있습니까? CGContextRestoreGState (currentContext)를 사용하여 시도했지만 아무 것도 변경되지 않았습니다. –

+0

컨텍스트를 무엇으로 설정합니까? 컨텍스트는 그리는 대상 일뿐입니다. CGContext를 보여주는 뷰를 생성하려면 가장 쉬운 방법은 UIImage로 변환하고 UIImageView를 사용하는 것입니다. 하지만 당신은 UIImage로 시작하고 있습니다. 그래서 그것은 약간 바보입니다. 사용자 정의 UIView 하위 클래스에 통합하려는 경우에는 유지하고 필요에 따라 적절히 합성해야합니다. 일반적으로 drawView :. – Tommy

+0

필자는 페인팅 뷰를 유지하는 부모 뷰와 필요에 따라 부모 뷰의 배경을 이미지로 설정하여 두 개의 개별 뷰를 갖게되었습니다. 제안 해 주셔서 감사합니다. –

관련 문제