2013-03-05 41 views
6

Tôi có chế độ xem có nhiều văn bản trong đó, vì vậy tôi muốn cho phép người dùng ẩn trạng tháiBar + navigationBar trên một lần nhấn. Tôi thực sự thích phong cách ẩn trong ứng dụng Ảnh, trong đó statusBar và navigationBar ẩn với nhau (không trượt, chỉ mờ dần), với một số animationDuration, vì vậy tôi đã cố gắng làm một việc như thế. Đây là những gì tôi làm trong phương pháp touchesDidBegan:ẩn thanh trạng thái và thanh điều hướng đồng thời, như trong ứng dụng Ảnh

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent]; 
    [UIView setAnimationDuration:0.5]; 
[UIView beginAnimations:@"" context:nil]; 
    [[UIApplication sharedApplication] setStatusBarHidden:!([UIApplication sharedApplication].statusBarHidden) withAnimation:UIStatusBarAnimationNone]; 
    [self.navigationController setNavigationBarHidden:(!self.navigationController.navigationBarHidden) animated:NO]; 
    [UIView commitAnimations]; 
    self.navigationController.navigationBar.translucent = !self.navigationController.navigationBar.translucent; // this is needed to make bars appear on top of my view. 
} 

Nhưng điều này không đồng thời ẩn các quán bar. Nó làm cho chúng trượt xuống. Nó có tác dụng tương tự như phiên bản này của phương pháp trên:

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent]; 
    // deleted UIView animation, changed animation type to "slide" 
    [[UIApplication sharedApplication] setStatusBarHidden:!([UIApplication sharedApplication].statusBarHidden) withAnimation:UIStatusBarAnimationSlide]; 
    // enabled animation for navBar 
    [self.navigationController setNavigationBarHidden:(!self.navigationController.navigationBarHidden) animated:YES]; 
    self.navigationController.navigationBar.translucent = !self.navigationController.navigationBar.translucent; // this is needed to make bars appear on top of my view. 
} 

Nếu tôi loại bỏ hoạt ảnh UIView và ẩn các thanh không có hoạt ảnh, chúng ẩn và xuất hiện đồng thời, nhưng quá nhanh. Có lẽ tôi đang đi sai hướng. Sẽ đánh giá cao nếu ai đó có thể giúp tôi với điều này.

Edit: đã nhận nó làm việc

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    // don't forget to set navigationBar.translucent to YES 
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent]; 
    [UINavigationBar setAnimationDuration:3.0]; 

    [UINavigationBar beginAnimations:@"" context:nil]; 
    [[UIApplication sharedApplication] setStatusBarHidden:!([UIApplication sharedApplication].statusBarHidden) withAnimation:NO]; 
    if ([UIApplication sharedApplication].isStatusBarHidden) 
     [self.navigationController.navigationBar setAlpha:0.0]; 
    else [self.navigationController.navigationBar setAlpha:1.0]; 
    [UINavigationBar commitAnimations]; 
} 

Trả lời

3

check demo này của https://github.com/kirbyt/KTPhotoBrowser trong này bạn tìm thấy làm thế nào để ẩn và hiển thị trạng thái và thanh định vị.

  • chủ yếu là bạn cần phải sử dụng NSTimer để cài đặt tự động ẩn sau 4 hoặc 5 giây hidding Statusbar hoặc Navigation thanh

  • bạn cũng có thể gắn thẻ hẹn giờ này sử dụng cảm ứng Begun để hiển thị hoặc ẩn một cách ngẫu nhiên.

Hy vọng bạn sẽ giúp bạn thực hiện công việc của mình. kiểm tra Bản mẫu của liên kết Github ở trên sử dụng điểm Barack. bạn có thể dễ dàng tìm thấy chức năng ẩn và hiển thị Statusbar hoặc NavigationBar.

+0

Tôi nhìn qua src của họ và tìm thấy ẩn/hiện ra phương pháp xử lý trong src/KTPhotoBrowser/KTPhotoScrollViewController.m họ cũng quấn trên thanh trạng thái và thanh điều hướng trốn vào UIView hoạt hình.Tuy nhiên, thay vì đặt navigationBarHidden thành YES, chúng chỉ thay đổi giá trị alpha của navigationBar từ 1.0 đến 0.0. Chỉ cần giữ navigationBar.transulent = YES. Tôi đoán setNavigationBarHidden: hoạt hình: phương pháp cho phép hoạt hình riêng của mình khi được đưa vào hoạt ảnh UIView (gây ra asynchronicity bw statusbar và navigationBar). Cảm ơn mặc dù. – AzaFromKaza

+0

cũng làm bạn của tôi, và bạn cũng đến! –

4

Đối ẩn UIStatusBar với hình ảnh động:

[[UIApplication sharedApplication] setStatusBarHidden: YES withAnimation: UIStatusBarAnimationSlide]; 

Đối ẩn UINavigationBar với hình ảnh động:

[UINavigationBar beginAnimations:@"NavBarFade" context:nil]; 
self.navigationController.navigationBar.alpha = 1; 
[self.navigationController setNavigationBarHidden:YES animated:NO]; //Animated must be NO! 
[UINavigationBar setAnimationCurve:UIViewAnimationCurveEaseIn]; 
[UINavigationBar setAnimationDuration:1.5]; 
self.navigationController.navigationBar.alpha = 0; 
[UINavigationBar commitAnimations]; 
+0

Sự khác biệt duy nhất trong mã của bạn là bạn đang sử dụng hoạt ảnh của UINavigationBar. Tuy nhiên, hiệu ứng tương tự. Ngoài ra, tôi muốn thanh trạng thái và thanh điều hướng để ẩn/xuất hiện mà không cần trượt. – AzaFromKaza

0
- (void)toggleStatusBarAndNavBar:(BOOL)hidden { 

UINavigationBar *navBar = self.navigationController.navigationBar; 
[[UIApplication sharedApplication] setStatusBarHidden:hidden withAnimation:UIStatusBarAnimationSlide]; 

[UIView animateWithDuration:0.35 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ 
    // 先显示navigationBar 
    if (!hidden) 
    { 
     [self.navigationController setNavigationBarHidden:hidden animated:NO]; 
    } 

    navBar.frame = CGRectMake(navBar.frame.origin.x, 
           hidden ? -navBar.frame.size.height : 20, 
           navBar.frame.size.width, 
           navBar.frame.size.height); 
} completion:^(BOOL finished) { 
    if (hidden) 
    { 
     [self.navigationController setNavigationBarHidden:hidden animated:NO]; 
    } 
}]; } 

Nó sẽ ẩn statusbar và Navigationbar simultaneously.choose UIStatusBarAnimationSlide cho phong cách hoạt hình statusbar của. Và thay đổi khung của navBar.

  1. khi hidding, và ẩn bằng NO. chúng ta nên thay đổi khung của navBar trước, sau đó làm cho navBar ẩn đi.
  2. khi hiển thị và ẩn bằng . chúng tôi làm cho hình ảnh navBar đầu tiên, sau đó thay đổi khung.
  3. chúng tôi chọn UIViewAnimationOptionCurveEaseOut, nó sẽ trông đẹp hơn.
Các vấn đề liên quan