2010-04-05 4 views
4

나는 그 안에 두 UIImageView의 한 부분 (그들은 하나의 "레이어"가끔 애니메이션 수 있도록 다음과 같이 구성되어있어 다른 모호하거나 다른이있는 UIView 컨테이너를 가지고있다.UIView 투명도는 소시지가 만들어지는 방법을 보여줍니다!

가끔 내가 만들고 싶어 이 컨테이너 50 % 알파, 그래서 사용자가 사라질 것으로 봅니다. 여기에 문제가 있습니다 : 내 컨테이너 뷰를 50 % 알파로 설정하면 모든 하위보기도 상속하게되며, 이제는 두 번째로 첫 번째 하위 뷰를 볼 수 있습니다. 응용 프로그램은 내가 찾고있는 이상한 X 선 효과를 가지고 있습니다.

물론 내가 무엇을했는지는 사용자가 현재 50 % 투명한 것으로 보는 것입니다. 가시적 인보기를 평평하게하는 것과 같습니다. 으로 하나의 비트 맵을 만든 다음 50 % 알파를 만듭니다.

이 작업을 수행하는 최선의 방법은 무엇입니까? 실제로 그것을 피하고 싶습니다. 뷰를 동적으로 병합하면 도움이되지만 뷰티에 대한 모범 사례도 환영합니다. 나는 명백한 것을 놓치고 있는가? 대부분의보기에는 하위보기가 있고이 문제가 발생할 것이므로 여기에 확실한 해결책이있는 것 같습니다.

감사합니다.

편집 : 의견을 보내 주셔서 감사합니다. 나는 단지 하나의 이미지를 다른 이미지 위에 올리면 서 부분적으로 애매하게된다. 그리고이 이미지 쌍은 때로는 함께 움직여야합니다. 그리고 때로는 모든 것이 사라지고, 어디에 있든간에, 그리고 이미지 쌍의 상태가 현재 무엇이든 사라지기를 원합니다. 나중에 다시 가져 와서 계속 애니메이션으로 만들고 싶습니다.

컨테이너의 스냅 샷을 만들려면 레이어 (?)를 렌더링하거나 전체 화면을 알파 아웃하기 전에 다른 오프 스크린 합성 작업을 수행해야합니다. 몇 가지 방법이 있습니다. 그것을하기 위해. 하지만 전체 애니메이션이 50 % 알파에있는 동안 애니메이션이 계속 발생한다면 어떻게 될까요?

내가하고 싶은 일에 대한 명백한 해결책이없는 것처럼 들리지만 이상하게 보입니다.하지만 모두 의견을 보내 주셔서 감사합니다.

+0

당신은 하나 개의 이미지가 다른 모호하게, 그리고 왜 정확하게 방법에 대한 자세한 특정 일 수 있습니다

여기에 UIView의 모습 수 무엇입니까? (어떤 효과/애니메이션을 달성하려고합니까) –

답변

2

UIImageView로 UIView를 병합하는 것이이 기능을 제공하는 데있어 마음이 있다면 최선의 방법이라고 생각합니다. 또한 이미지를 평평하게 만드는 것이 생각만큼 복잡하지는 않을 것이라고 생각합니다. this question에 제공된 답변을 살펴보십시오.

-1

+0

이것에 대해 자세히 설명해 주시겠습니까? 창문에 그들을 추가하는 것이 도움이되는 것은 무엇입니까? 감사. –

+0

줄리앙이 당신의 질문을 오해하고 있다고 생각합니다. 당신은 UIView를 사라지려고하지 않습니다. UIView 및 사용자가 볼 수있는 UIImageViews의 부분 만 페이드 인합니다. UIImageViews를 UIWindow에 추가하면 도움이되지 않습니다. – glorifiedHacker

+0

그래, 오해, 미안 해요 – Julien

0

.hidden = YES을 가지고 아래있는 UIImageView를 설정 (컨테이너가 가짜 일 것)을 UIWindow에 ImageViews를 추가하는 것입니다 할 수있는 방법은 다음 .hidden = NO을 설정할 때 크로스 페이드 애니메이션 당신 설치 위쪽 및 아래쪽 UIImageViews 사이에.

모든 것을 페이드 처리해야하는 경우 컨테이너보기 또는 맨 위 이미지보기에 .alpha = 0.5을 설정하면됩니다. 중요하지 않아야합니다. 이미지 뷰 자체에 .alpha = 0.5을 설정하는 것이 계산 상으로 더 효율적일 수 있지만, 아이폰의 그래픽 파이프 라인에 대해서는 충분히 알지 못합니다.

이 방법의 유일한 단점은 상단 이미지가 50 % 불투명도로 설정된 경우 크로스 페이드를 수행 할 수 없다는 것입니다.

+0

UIImageViews가 부분적으로 만 겹치기 때문에, 나는 이것이 quixoto가 찾고있는 것을 달성 할 것이라고 생각하지 않습니다. 하단 UIImageView 부분적으로 밖으로 튀어 나와, 아마 숨길 수 있도록 옵션이 아닙니다. – glorifiedHacker

+0

네 말이 맞아, 나는 '부분적으로 어둡게'를 놓쳤다. quixoto가 정확히 대답 할 수 있도록하기 위해 노력하고있는 정보에 대해 더 많은 정보가 필요하다고 생각합니다. –

3

최근에 나는 글로벌 투명성을 지닌 콘텐츠 레이어에 애니메이션을 적용해야하는 동일한 문제가있었습니다. 애니메이션이 꽤 복잡해 졌기 때문에 UIView 계층을 평평하게 만드는 것이 고르지 못한 애니메이션을 만들었습니다.

내가 찾은 해결책은 UIViews 대신 CALayers를 사용하고 컨테이너 레이어에 속성을 YES으로 설정하여 불투명도를 적용하기 전에 모든 하위 레이어가 자동으로 병합되도록했습니다.

#import <QuartzCore/QuartzCore.h> //< Needed to use CALayers 

... 

@interface MyView : UIView{ 
    CALayer *layer1; 
    CALayer *layer2; 
    CALayer *compositingLayer; //< Layer where compositing happens. 
} 

... 

- (void)initialization 
{ 
    UIImage *im1 = [UIImage imageNamed:@"image1.png"]; 
    UIImage *im2 = [UIImage imageNamed:@"image2.png"]; 

    /***** Setup the layers *****/ 
    layer1 = [CALayer layer]; 
    layer1.contents = im1.CGImage; 
    layer1.bounds = CGRectMake(0, 0, im1.size.width, im1.size.height); 
    layer1.position = CGPointMake(100, 100); 

    layer2 = [CALayer layer]; 
    layer2.contents = im2.CGImage; 
    layer2.bounds = CGRectMake(0, 0, im2.size.width, im2.size.height); 
    layer2.position = CGPointMake(300, 300); 

    compositingLayer = [CALayer layer]; 
    compositingLayer.shouldRasterize = YES; //< Here we turn this into a compositing layer. 
    compositingLayer.frame = self.bounds; 

    /***** Create the layer three *****/ 
    [compositingLayer addSublayer:layer1]; //< Add first, so it's in back. 
    [compositingLayer addSublayer:layer2]; //< Add second, so it's in front. 

    // Don't mess with the UIView's layer, it's picky; just add sublayers to it. 
    [self.layer addSublayer:compositingLayer]; 
} 

- (IBAction)animate:(id)sender 
{ 
    /* Since we're using CALayers, we can use implicit animation 
    * to move and change the opacity. 
    * Layer2 is over Layer1, the compositing is partially transparent. 
    */ 
    layer1.position = CGPointMake(200, 200); 
    layer2.position = CGPointMake(200, 200); 
    compositingLayer.opacity = 0.5; 
}