2013-08-06 2 views
0

UINavigationController 탐색 모음과 도구 모음을 화면에 표시하거나 숨기는 애니메이션을 적용합니다. 그것은 예상대로 작동하지만 - 그들 사이에 포함 된보기는 크기를 부드럽게 변경하지 않습니다.도구 모음 또는 탐색 모음이 화면에서 켜지거나 꺼질 때 네비게이션보기 크기가 부드럽게 조정됩니다.

바가 움직이면 켜지거나 꺼 지지만, 탐색보기는 축소 된 크기 (두 막대가 모두 표시 될 때)에서 전체 화면 크기 (숨겨진 경우)로 이동합니다.

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:1.0]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

[[self navigationController] setNavigationBarHidden:YES animated:YES]; 
[[self navigationController] setToolbarHidden:YES]; 

[UIView commitAnimations]; 

을 ...하지만 어떤 차이를하지 않습니다

순전히 추측으로, 나는 이것을 시도했습니다.

탐색보기에서 크기를 부드럽게 변경하는 방법이 있습니까?

나는 그렇게 점프모든하지만, 그 못생긴 보이는 것을 animated:NO를 사용하여 문제를 해결할 수 있습니다.

미리 감사드립니다.

답변

0

해당 애니메이션 블록 내에서 막대를 숨긴 후에 중간보기의 프레임을 설정하려고 시도 할 수 있습니다. 그것은 전환을 원활하게해야합니다.

2

나는 부드러운 뷰 전환 만들기 위해 무슨 짓을 : 기본적으로 메뉴 바 및 툴바의 사이에 콘텐츠를 자동으로 크기를 조정하지 말아야 뷰 (예를 들면 사진을)

1) 인터페이스 빌더에서를 그래서 선택 해제 Suboress Autoresize 플래그

2) 숨기기/숨기기 해제 이벤트에 대해 다음 터치 처리기를 생성했습니다. 요점은 기본 제공 숨기기/숨기기 애니메이션에 애니메이션을 추가하는 데

[UIView transitionWithView:self.view 
    duration:UINavigationControllerHideShowBarDuration 
    options:UIViewAnimationOptionCurveLinear 
    animations:^ 
    { 
     /* Put other animation code here ;) */ 
    }]; 

코드 스 니펫을 사용하는 것입니다.

원래 나는 두 개의 막대를 숨기거나 숨김 해제하고 iOS에서 내부보기의 크기를 조정하게했습니다. 결과 (시뮬레이터에서)는 실망스럽고 부드럽 지 않았습니다. 막대를 한 개만 숨기면보기의 크기가 잘 조정되지만 코드의 막대는 두 개가 아닙니다.

그래서 여기에 트릭을 수행하는 전체 touchedBegun 이벤트 핸들러의 :

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

    AppDelegate *app = (AppDelegate*) [[UIApplication sharedApplication] delegate]; 
    if (blVisible) { 
     [app.navigationController setToolbarHidden:YES animated:YES]; 
     [app.navigationController setNavigationBarHidden:YES animated:YES]; 

     [UIView transitionWithView:self.view 
          duration:UINavigationControllerHideShowBarDuration 
          options:UIViewAnimationOptionCurveLinear 
         animations:^ 
     { 
      /* Put other animation code here ;) */ 
      self.img.frame = CGRectMake(0, 0, 320, 480); 
     } 
         completion:^(BOOL finished) 
     { 
     }]; 


    } else { 
     [app.navigationController setToolbarHidden:NO animated:YES]; 
     [app.navigationController setNavigationBarHidden:NO animated:YES]; 

     [UIView transitionWithView:self.view 
          duration:UINavigationControllerHideShowBarDuration 
          options:UIViewAnimationOptionCurveLinear 
         animations:^ 
     { 
      /* Put other animation code here ;) */ 
      self.img.frame = CGRectMake(0, 0, 320, 387); 
     } 
         completion:^(BOOL finished) 
     { 
     }]; 

    } 
    blVisible = !blVisible; 
} 

하나 개의 작은 의견 : 지금은 원활하지만, 시뮬레이터에서 내가 보는 것은 아이폰 OS가 어떻게 든 /가에있는 두 개의 막대를하지 숨김을 취소 숨 깁니다이다 -sync 그래서보기 크기 조정이 완벽하게 시간 초과되지 않습니다. Pls도 장치를 확인하십시오.

좀 더 완벽한 솔루션을 원하는 경우에 당신이 ... 완벽하게 숨기기/숨기기 해제 효과를 설정 제어 할 자신에 대한 상세한 답변에 대한

+0

감사 막대를 구현해야한다 생각합니다. 나는 당신의 접근 방식을 시도해 보았지만 조금 개선되었다.하지만 슬프게도 문제는 해결되지 않는다. 여러 실험을 거친 후에는보기가 한 방향으로 부드럽게 움직입니다. 즉, 탐색 막대가 숨겨 짐에 따라 화면이 부드럽게 위로 올라갈 수 있지만 아래쪽 도구 모음이 화면에서 벗어나기 전에보기의 아래쪽이 아래로 이동합니다. 나는 완벽한 솔루션을 찾기 위해 직접 구현에 대한 귀하의 의견은 아마도 정확하다고 생각합니다 ... iOS는 두 막대를 동시에 부드럽게 숨기는 방법이없는 것 같습니다. – James

+0

다른 프로젝트에서 viewA (navbar없이)를 viewB (navbar 사용)로 밀어 넣고 push anim 중에 활성화 시키면 iOS가 이것을 어떻게 처리하는지 실망 시켰습니다. 그래서 iOS navbar를 항상 숨김 상태로 만들기로 결정했습니다. 푸시/팝 기능을 구현하고 사용자 정의 navbar를 구현 ... – nzs

+0

나는이 해결책으로 더 많은 것을 할 수 있다고 생각합니다. 예 : 1) 숨기기/숨김을 취소하고 숨김 상태에서보기를 부드럽게 또는 2) 숨김/동작은보기의 알파를 0.4로 변경하고 다시 1.0으로 변경하여이 솔루션의 작은 불완전 함을 보완합니다. 마침내 나는이 답변에서 질문에 대한 완전한 시각을 얻었다면 @James가 다른 사람들을 도울 수 있도록 받아 들여야한다고 생각한다. – zZzZ

관련 문제