1

탐색 컨트롤러를 사용하여 확대하는 것처럼 보이는 사용자 지정 segue를 사용합니다. segue가 끝나고 pushViewController: animated: 메서드가 호출되면 글리치 효과가 나타납니다. 탐색 표시 줄이 즉시 나타나고 scrollView의 내용을 높이 (88 픽셀)의 값과 함께 아래에 배치합니다. 아래의 애니메이션은 효과를 명확하게 나타냅니다.
http://s7.postimg.org/7in5s980r/image.gif
볼 수 있듯이, scrollView의 내용은 segue의 마지막 단계에서 매우 빠르게 움직입니다.사용자 지정 segue 및 탐색 컨트롤러 애니메이션 결함

내가 생각
- (void)perform { 
    UIViewController *sourceViewController = self.sourceViewController; 
    UIViewController *destinationViewController = self.destinationViewController; 

    // Add the destination view as a subview, temporarily 
    [sourceViewController.view addSubview:destinationViewController.view]; 

    // Transformation start scale 
    destinationViewController.view.transform = CGAffineTransformMakeScale(0.05, 0.05); 

    // Store original centre point of the destination view 
    CGPoint originalCenter = destinationViewController.view.center; 
    // Set center to start point of the button 
    destinationViewController.view.center = self.originatingPoint; 

    [UIView animateWithDuration:1.0 
          delay:0.0 
         options:UIViewAnimationOptionCurveEaseInOut 
        animations:^{ 


         destinationViewController.view.transform = CGAffineTransformMakeScale(1.0, 1.0); 
         destinationViewController.view.center = originalCenter; 
        } 
        completion:^(BOOL finished){ 

         [destinationViewController.view removeFromSuperview]; 
         [sourceViewController.navigationController pushViewController:destinationViewController animated:NO]; 

        }]; 
} 

, 문제는 (이 푸시 SEGUE 인 경우)의 ViewController 네비게이션 바의 높이 (컨텐츠 아래로 조금을두고 일반적이다 : 여기 Animation glitch


는 SEGUE 코드입니다) 그리고 segue 동안 이것을한다. 그러나 이제는 segue를 사용자 지정으로 처리하고 Navigation Bar를 무시하지만 NavBar에서 내용의 일부가 겹쳐져 있음을 보여줍니다. Navigation Controller에서 새 VC를 제공하면 NavBar의 높이가 계산되고 즉시 콘텐츠가 다운됩니다. 내 생각 엔, 콘텐츠 뷰어에서 segue 동안 콘텐츠 크기 및 시작점과 같은 scrollView의 속성을 설정하는 방법이있을 수 있지만이를 구현하는 방법을 모를 수 있습니다.

답변

1

XCode가 없으므로 여기에 제 추측입니다.

그래서, 먼저 다음

// Add the destination view as a subview, temporarily 
[sourceViewController.view addSubview:destinationViewController.view]; 

을했다, 당신은 당신이 볼 수있는 애니메이션 어느

animateWithDuration:delay:options:animations:completion: 

을했다. 내가 옳다면 전체보기가이보기를 맨 위에 추가했기 때문에 탐색보기를 포함하게됩니다.

완료시이보기는 수퍼 뷰에서 제거되었지만 네비게이션보기 컨트롤러로 밀어 넣었습니다. 이 단계는 애니메이션에서 보이는 점프를 발생시킵니다.

이 때문에 점프가 발생했습니다. 전체보기를 덮은보기가 제거 (갑자기 사라짐)됩니다. 그러면 탐색보기가 다시 나타나고 (탐색 막대가 표시됨)보기가 탐색보기 컨트롤러로 밀려나고 탐색보기에 포함됩니다. 그게 왜 애니메이션 결함처럼 보이고 정말로 빠르게 움직이는 지.

+0

거의 틀림없이 그 이유는 분명합니다. NavBar에 패딩을 적용하지 않고 애니메이션에서 VC를 표시하고 나중에이 패딩을 추가하기 때문입니다. 그러나 나는이 아이디어를 해결하는 방법에 대해 어떤 아이디어를 요구했다. –

+0

내가 생각할 수있는 한 가지는 탐색보기 스택에 새로운 빈보기를 푸시 할 수 있다는 것입니다. 그런 다음 새 뷰는 destinationView를 하위 뷰로 추가하고 애니메이션을 애니메이션으로 만들 수 있습니다. – veovo

+0

스토리 보드에 투명 (알파 = 0) NavBar를 추가하여 iOS 7 이상에서 이미이 문제를 해결했습니다. 문제의 솔루션 자체를 추가합니다. 투명한 NavBar를 추가하면 도움이되지 않으므로 iOS 6에 대한 질문은 아직 열려 있습니다. –

관련 문제