3

검정으로 희미 해지고 뷰 컨트롤러를 스왑 아웃 한 다음 투명으로 페이드 아웃하는 사용자 정의 세그를 만듭니다. 불행히도 그렇게 할 수는없는 것 같습니다. 여기에 코드입니다 :UIView에 알파 애니메이션이 작동하지 않습니다.

- (void)perform { 

    UIView *overlay = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [self.sourceViewController navigationController].view.frame.size.width, [self.sourceViewController navigationController].view.frame.size.height)]; 
    [overlay setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0.0]]; 
    [[self.sourceViewController navigationController].view addSubview:overlay]; 

    [UIView animateWithDuration:2.0 delay:0.0 options:(UIViewAnimationOptionCurveEaseIn) animations:^{ 
     [overlay setAlpha:1.0]; 
    }completion:^(BOOL finished) { 
     [[self.sourceViewController navigationController] pushViewController:[self destinationViewController] animated:NO]; 
     [UIView animateWithDuration:2.0 delay:0.0 options:(UIViewAnimationOptionCurveEaseIn) animations:^{ 
     [overlay setAlpha:0.0]; 
     }completion:^(BOOL finished) { 
     [overlay removeFromSuperview]; 
     NSLog(@"Done!"); 
     }]; 
    }]; 

} 

그래서, 제가했던 것은 검은 색 배경에 그런 0의 알파가있는 탐색 컨트롤러에있는 UIView를 추가 할 것입니다, 나는 1 알파를 변경하는 애니메이션을, 대상보기 컨트롤러를 탐색 컨트롤러로 밀어 넣은 다음 다시 애니메이션을 적용하여 지 웁니다. 내가 이렇게하면 아무 일도 일어나지 않습니다. 어떤 종류의 애니메이션없이 목적지 컨트롤러를 탐색 컨트롤러에 놓기 만하면됩니다.

이상하게도, 1의 알파로 시작하여 0으로 애니메이션 한 다음 1로 돌아 가면 작동합니다 (그러나 원하는 것은 아닙니다).

필자는 명확한 UIView를 배제한 최적화가 진행 중이므로 투명도를 변경하는 것이 의미가 없다고 생각합니다.

답변

2

이렇게하면 어떻게됩니까?

... 
[overlay setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:1.0]]; 
[overlay setAlpha:0.0]; 
[[self.sourceViewController navigationController].view addSubview:overlay]; 
... 
+0

그건 작동합니다! 그러나 왜? –

+1

@JonA, 배경색이 아닌보기에서 알파에 애니메이션을 적용했습니다. 따라서 배경색을 불투명하게 설정하고보기의 알파를 투명으로 시작해야합니다. –

+0

아 물론. 오늘 모든 실린더에서 발사하지 말아야합니다. 후속 조치에 감사드립니다. –

관련 문제