2013-01-03 5 views
15

나는 두 가지 다른 UIImageViews을 가지고 있습니다. 화면 하단에 UIImageView 블렌드 모드를 사용하여 화면 상단에 UIImageView을 블렌드하고 싶습니다.iOS에서 블렌드 모드로 UIView를 쌓아보기

나는 CALayer의 속성을 알고 있습니다 : compositingFilter 그리고 iOS에서 작동하지 않는다는 것을 알고 있습니다. 솔루션을 많이 찾았으며 하위 클래스 인 UIView을 어떻게 사용해야하는지 확인하고 drawRect을 재정의했습니다.

drawRect의 컨텍스트를 화면 블렌드 모드로 설정하려고 시도했지만 이미지를 모두 정상적으로 그립니다. 아마도 나는 잘못된 것을하고 있거나 접근 방식이 달라야합니다. 아마도 OpenGL이나 CALayer가 필요합니다. 누군가 도움을 줄 수 있습니까?

+0

코드를 게시하십시오. 또한 두 이미지를 하나의 그림으로 그려야합니다. 하나의보기와 다른보기의 내용을 혼합 할 수 없습니다. –

+0

@KurtRevis 스크린을 사용하여 하나의 UIView에 두 개의 이미지를 그릴 수 있다는 것을 알고 있습니다. drawRect의 기본 그림입니다. 나는 견해들 사이에서 그것을 할 필요가 있었다. 지금 당장 존재하지 않는다면 그 질문을 닫을 수 있도록 대답으로 게시하십시오. –

답변

17

iOS의 UIView간에 혼합되지 않은 혼합 방법은 없습니다. UIKit은 기능을 제공하지 않으며, 이미 언급했듯이 CALayer는이를 수행 할 수 없습니다.

일반적으로 UIView에서 -drawRect를 구현하면 도움이되지 않습니다. 비어있는 비트 맵을 그리는 중입니다.이 비트 맵의 ​​뒤에는보기 비트가 포함되어 있지 않습니다. 언제든지 변경 될 수 있기 때문에 (보기 또는 레이어가 애니메이션으로 표시 될 수 있기 때문입니다.) CA는 근본적으로 레이어의 내용이 서로 독립적이어야한다고 가정합니다.

당신 , 당신의 -drawRect:

  1. 에 대한 -[CALayer renderInContext:]를 사용하여보기에서보기 이미지 컨텍스트
  2. 추첨에서 이미지를 만들 이미지 컨텍스트를
  3. 캡처를 만들 시도 할 수 해당 이미지를보기에 넣으십시오.
  4. 블렌드 모드를 설정하고 위에 그립니다.

그러나 느리고 허약하며보기를 움직이게하면 작동하지 않습니다. 나는 그것을 추천하지 않을 것이다.

정말 필요한 경우 OpenGL로 렌더링하려면 전체 장면을 전환해야합니다 (where you've got more freedom).

+1

장면 위로 OpenGL 뷰를 추가하여 컨텐츠를 합성 할 수있는 방법이 있습니까? 아니면, 화면에서 렌더링하고 텍스처로 캡처 한 다음 OpenGL을 사용하여 장면을 그릴 수 있습니까? – nielsbot

+0

내가 설명한 것처럼 UIView의 화면 렌더링은'- [CALayer renderInContext :]'를 사용해야 할 것입니다. 그렇지만 그렇다면 OpenGL 컨텍스트에 그 내용을 그릴 수 있습니다. 단점 같은 목록. –

+1

관심 대상 : http://stackoverflow.com/questions/3410350/mixing-opengl-and-uikit – nielsbot

관련 문제