2009-09-10 8 views
2

여러분이이 코드가 왜 이미지를 표시하지 않는지 말할 수 있습니까?왜이 CALayer는 이미지를 표시하지 않습니까?

CALayer *layerBack = [CALayer layer]; 

addedObject = [[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle] 
    pathForResource:[NSString stringWithFormat: @"%@%d", PREFIX, number] ofType:@"png"]]; 

layerBack.bounds=CGRectMake(0.0f,0.0f,selectedImage.size.height,selectedImage.size.width); 
layerBack.position=CGPointMake(200,200); 

layerBack.contents = (id)selectedImage.CGImage; 
// in theory I think this line should be equal to selectedImage.CGImage, but when I do that, Xcode shows me an error! 

[self.view.layer addSublayer:layerBack]; 

[layerBack display]; 

이 석영 물건이 나를 미치게합니다! 도와주세요!

예, 이미지가 있고 작동하지만이 코드가 표시된 후에 보이는 것은 빈 화면입니다.

+0

왜 당신은 그냥 뷰, 특히있는 UIImageView를 사용하지 않고는 약 3 라인에이 코드를 줄일 방법을 imageNamed이야? – mahboudz

+0

최종 결과를 파일 끝에 전송해야하기 때문에 최종적으로 UIViews에서 CGLayers로 변환을 복사하는 것이 더 어렵습니다. – SpaceDog

답변

3

이 코드는보기 컨트롤러에서 가져온 것으로보기 전에이보기가 올바르게 구성되었다고 가정합니다 (그렇지 않으면 메시지를 nil로 보낼 것입니다). 또한 위의 addedObject으로 가정하면 selectedImage을 의미합니다. 나를 밖으로 점프 한 가지

[layerBack display]; 

이 직접이 방법 를 호출해서는 안 -display:

에 관해서의 CALayer documentation에서

[layerBack setNeedsDisplay]; 

로 대체해야한다는 것입니다.

코어 애니메이션 프로그래밍 가이드의 "Providing Layer Content" 섹션에서 이와 같은 레이어 내용을 설정하는 방법에 대해 자세히 알아보십시오.

+0

그게 다야! 고마워요 !!!!!! – SpaceDog

+2

David Duncan이 코코아 개발자에게 대답했습니다 : 기본적으로 이것은 방금 설정 한 내용을 제거합니다. -setNeedsDisplay 또는 -display를 호출하면 레이어가 내용을 생성하고 내용 속성을 해당 작업의 결과로 설정합니다. contents 속성을 수동으로 설정하면 해당 레이어에서 -setNeedsDisplay 또는 -display를 호출하면 안됩니다. 그렇지 않으면 설정 한 내용이 손실됩니다. 일부 대리자 메서드를 구현하거나 CALayer를 서브 클래 싱하여 피할 수 있지만, 일반적으로 CALayer를 제어 할 때 CALayer를 유지함으로써이 문제를 완전히 피하는 것이 더 쉽습니다. –

2

글쎄 우선 CGImage를 ID로 전송해야한다고 생각합니다.

layerBack.contents = (id)selectedImage.CGImage; 

그리고 둘째로, 나는 콘텐츠 계층에게 뷰

[self.view.layer addSublayer:layerBack]; 

을 레이어를 추가해야하지만, 난 항상 내 사용자 지정 UIViews 클래스의 + (클래스) layerClass의 사용을 만들었습니다 생각; 자신의 하위 레이어를 레이아웃하는 맞춤 레이어를 생성하지만, 아마도 그것은 저뿐입니다.

+0

감사합니다. 두 가지 모두 변경했는데 레이어가 표시되지 않습니다. 제가 물어볼 수 있다면, 당신이 창조 한이 수업을 친절하게 보내 주실 수 있습니까? 가능하다면 "utugau -> at <- gmail">에 메일을 보내십시오. 내 머리카락이 석영으로 절망적으로 회색으로 바뀌고 있습니다 ... – SpaceDog

+0

테스트를했기 때문에 내 제안을 원본 게시물에 추가했습니다. 그들과 코드는 여전히 어떤 내용도 보이지 않습니다. – SpaceDog

1

selectedImage 란 무엇이며 addObject와 어떤 관련이 있습니까? 내가 본 것으로부터 이미지를 얻었지만 완전히 다른, 관련없는 이미지 (아마도 공백 이미지)를 레이어에 추가합니다.

Xcode에서 제공하는 메시지에주의하고 있습니까?

+0

그 코드를 복사 할 때 addObject는 오타였습니다 ... 여기에 코드를 입력 할 때 몇 가지 변수를 변경 했으므로 ... 도움을 주셔서 감사합니다. – SpaceDog

1

다리를 :

layerBack.contents = (__bridge id)selectedImage.CGImage; 
+0

이 브리지 ID가 무엇인지 설명 할 수 있습니까? 감사. – SpaceDog

+0

'(__bridge id)'는 Cocoa와 Core foundation (또는 일반적으로 C 언어)간에 객체를 전송하기 위해 Cocoa의 다소 새로운 ARC (Automatic Reference Counting)에서 사용됩니다. 자세한 내용은 Apple 또는 [this] http : //www.mikeash.com/pyblog/friday-qa-2011-09-30-automatic-reference-counting.html) Mike Ash의 블로그 게시물. – Regexident

관련 문제