2014-02-25 3 views
6

UIImageView 나는 이미지를 동적으로 (URL에서) 설정하고 있습니다. 이미지는 임의의 크기/종횡비를 가질 수 있습니다. 필자는 화면 채우기에 contentMode을 설정하고보기 레이어의 clipsToBoundsYES으로 설정하면 올바르게 표시됩니다. 그러나 이미지보기 아래에 그림자를 표시하려고합니다. 이미지 뷰의 레이어에 그림자를 설정하면 그림자가 표시되도록 clipsToBoundsNO으로 설정해야합니다. 이로 인해 뷰에서 이미지의 블리딩 부분이 표시됩니다. 이미지보기 크기를 일정하게 유지 (화면 채움)하고 그림자를 동시에 활성화하려면 어떻게합니까?UIImageView 그림자 및 애스펙트 함께 채우기

하나의 옵션은 그래픽 컨텍스트를 만들고 해당 컨텍스트로 이미지를 다시 그려서 원하는 가로 세로 비율로 이미지를 가져 와서 그 이미지를 내 이미지보기의 이미지로 설정하는 작업이 포함될 수 있습니다. 추가 처리/CPU/GPU 낭비 및 정상 세계 시간 (특히 큰 이미지가있는 이미지 뷰가 많은 경우).

내 이미지보기와 동일한 크기로 빈보기를 만들고 내보기에서 내 수퍼 뷰에 삽입 한 다음 제한을 사용하여 내보기에 동적으로 첨부하고 해당보기의 레이어에서 그림자를 사용하도록 설정할 수 있습니다. 또한 그림자에 대한 추가보기를 만드는 것도 포함됩니다. 아마 첫 번째 것보다 더 좋고/더 효율적인 해결책이지만, 여전히 여분의 일 (CPU 적으로).

내 조건에서 그림자 및 애스펙트 피팅을 사용할 수있는 추가 작업이 필요없는 옵션이 있습니까? 내가 두 번째 옵션에 비해 최적입니다 생각

답변

1

하나 개의 솔루션,

그냥 이미지를 표시하고 it.You 그것을 달성하기 위해 두 CALayer 인스턴스를 사용할 수 있습니다에 어떤 userInteraction을 가지고 있지하려는 가정합니다.

사용자 상호 작용을 사용하려면 UIViewCALayer 중 하나를 사용하십시오. 두개의 CALayer 함께

instances->

  • 두 층을 만든다. maskToBounds = YES로 이미지를 저장하고 표시하는 한 레이어. contents property을 사용하여이 레이어에 이미지를 설정합니다.
  • 위의 레이어를 subLayer로 추가하여 그림자를 추가하고 두 번째 CALayer에 clipToBounds = YES를 추가합니다.

위는 Apple에서 제안한 것입니다. 그들 자신의 말로 ->

그림자가 필요하고 경계 마스크를 사용하려면 하나 대신 2 개의 레이어를 사용하십시오. 내용이 포함 된 레이어에 마스크를 적용한 다음 그림자 효과가 활성화 된 동일한 크기의 두 번째 레이어 안에 레이어를 포함합니다.

확인하십시오. link. 그리고 위의 용어를 검색하십시오.

+0

좋은 솔루션이지만 실제로 상호 작용이 필요합니다. 뷰를 끌 때 효과가 있습니다 (드래그 된 시각적 큐가 다른 뷰를 통해 "오버"되고 있음) –