2012-07-31 6 views
3

다음과 같은 몇 가지 변형을 시도해 보았습니다. 내가 원하는 것은 몇 가지 사실을 보여주는 컬 다운 트랜지션 (curl down transition)과 그 반대의 컬 전이 백업 (curl transition up)입니다. 투명성이 있으므로 그 효과는보기 위에 굴러가는 명확한 효과입니다. 이 롤 위아래로 롤에 호출되는 함수입니다 : 내가 억 가지 시나리오를 시도했습니다transitionWithView로 동시에 보이기 및 숨기기

-(void) setVisibility:(BOOL)isVisible animated:(BOOL)animated{  
    if (isVisible){ 
     self.topFold.hidden = YES; 
    } 
    [UIView transitionWithView:self 
         duration:1.0f 
         options:isVisible ? UIViewAnimationOptionTransitionCurlDown : UIViewAnimationOptionTransitionCurlUp 
        animations:^{ 
         self.imageView.hidden = !isVisible; 
         self.background.hidden = !isVisible; 
         self.bottomCornerFold.hidden = !isVisible; 
        } 
        completion:^(BOOL finished){ 
         if (!isVisible){ 
          self.topFold.hidden = NO; 
         } 
        } 
    ]; 
} 

그러나 이것은 가장 가까운입니다. 그러나 문제는 isVisible = YES으로 실행될 때 topFold은 전환이 완료 될 때까지 계속 표시됩니다. 다시 말하면, 새로운 것들이 그 위에 얹히는보기의 복사본이있는 것처럼, 새로운 것들이 그 위에 넘깁니다. 그런 다음 작업이 완료되면 모든 것을 올바른 버전으로 바꿉니다.
애니메이션을 시작하기 전에 topFold을 숨기려고합니다. 그러나 어떤 이유로 애니메이션이 끝날 때까지 매달려 있습니다. 여기에 포인터를 좋아할 것입니다.

답변

1

서투른하지만 효과적인 부서에서 나는 두 개의 애니메이션을 중첩 시켰는데 하나는 다른 완성 블록 안에 중첩되어 있습니다. 다음과 같이 보입니다.

0

또 다른 접근법은 짧은 기간 동안 런 루프를 시작하여 숨길 수있는 topFold보기 시간을 제공하는 것입니다.

if (isVisible){ 
    self.topFold.hidden = YES; 
    [[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.0001]]; 
}