2015-08-20 2 views
1

Я пытаюсь воспроизвести эффект в приложении «Карта», при котором касание карты соскальзывает и снова включает верхнюю и нижнюю панели и строку состояния вдоль них даже на iOS 7 и, конечно же, на iOS 8 в моем приложении. Конечно, у меня нет проблем с раздвижением моих артефактов, но строка состояния меня озадачивает, и я не могу ее сдвинуть на iOS 8 и гораздо меньше на iOS 7. Лучшее, что я могу достичь, - это угасать, переопределив prefersStatusBarHidden; что, конечно же, не идет хорошо с общим движением скольжения.Воспроизведение эффектов Apple в приложении карты, передвигающемся по строке состояния

Как это возможно?

ответ

0

Это мое окончательное внедрение для управления благодаря намеку Томми:

BOOL controlsWereShown=YES; 

-(void)toggleControls{ 
    UIWindow *statusBarWindow = (UIWindow *)[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"]; 
    CGRect frame=CGRectZero; 
    if([statusBarWindow isKindOfClass:[UIWindow class]]){ 
     frame= statusBarWindow.frame; 
     if(frame.origin.y < 0){ 
      frame.origin.y = 0; 
     } 
     else{ 
      frame.origin.y = -85; 
     } 
    } 
    [UIView animateWithDuration:.8 animations:^{ 
     self.barConstraint.constant=(controlsWereShown?-85:19); 
     self.bottomConstraint.constant=(controlsWereShown?50:0); 
     self.renewalViewConstraint.constant=(controlsWereShown?-120:0); 
     controlsWereShown=!controlsWereShown; 
     if (frame.size.width != 0) statusBarWindow.frame = frame; 
     [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate) withObject:nil]; 
     [self.view layoutIfNeeded]; 
    } 
       completion :^(BOOL finished){ 

       } 
    ]; 
} 

Единственная проблема в этом решении является то, что в строке состояния горок вместе с верхним баром вместо того, чтобы оставаться прикрепленным к нему сверху во время скольжения. Я как бы фиксировал его, установив конец конца на -85 вместо -20, поэтому следите за полосой при сдвиге.

1

Вы могли бы сделать что-то вроде этого:

UIWindow *statusBarWindow = (UIWindow *)[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"]; 
    if([statusBarWindow isKindOfClass:[UIWindow class]]){ 
     CGRect frame = statusBarWindow.frame; 
     if(frame.origin.y < 0){ 
      frame.origin.y = 0; 
     } 
     else{ 
      frame.origin.y = -20; 
     } 

     [UIView animateWithDuration:0.15 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{ 
      statusBarWindow.frame = frame; 
     } completion:nil]; 
    } 
+0

Это очень интересно. Я не знал, что могу рассматривать строку состояния как обычное окно. –