2013-05-08 3 views
1

Я пытаюсь воссоздать анимацию, выполненную в приложении Google Maps, которое появляется, когда вы выбираете местоположение на карте. Выбрав местоположение, UIView вырывается из нижней части экрана. Вы можете сделать это, чтобы показать UIScrollView с дополнительным контентом. Мне любопытно, как они это делают, поэтому вы можете прокручивать содержимое внутри UIScrollView, когда родительский вид находится в верхней части. Я понимаю, что вы можете setScrollEnabled :, но они как-то делают это «на лету», чтобы при скольжении пальца вверх по родительскому представлению «доки», а затем прокручивалось внутреннее содержимое, а когда вы прокручиваете контент вниз, он останавливается, как только он достигает верхней части содержимого и начинает тянуть его вниз.UIScrollView внутри перемещаемого UIView

Любые идеи?

When pulled up At the bottom

ответ

0

Я решил эту проблему, делая что-то вроде этого: Создать анимацию, которая перемещает родитель мнения, скроллинга от половины видимой позиции на вершину ....

- (void)setScrollViewExpanded:(BOOL)expanded { 

    BOOL isExpanded = self.scrollViewContainer.frame.origin.y == 0.0; 
    if (isExpanded == expanded) return; 

    CGRect frame = self.scrollViewContainer.frame; 
    CGRect newFrame; 

    if (expanded) { 
     newFrame = CGRectMake(0, 0, frame.size.width, self.view.frame.size.height); 
     self.scrollView.delegate = nil; 
     self.scrollViewContainer.frame = CGRectMake(0, frame.origin.y, frame.size.width, self.view.bounds.size.height); 
     self.scrollView.delegate = self; 
    } else { 
     newFrame = CGRectMake(0, 300, frame.size.width, frame.size.height); 
    } 

    [UIView animateWithDuration:1 animations:^{ 
     self.scrollViewContainer.frame = newFrame; 
    } completion:^(BOOL finished) { 
     if (!expanded) { 
      self.scrollView.delegate = nil; 
      self.scrollViewContainer.frame = CGRectMake(0, 300, self.scrollViewContainer.bounds.size.width, self.view.bounds.size.height-300); 
      self.scrollView.delegate = self; 
     } 
    }]; 
} 

Запуск анимации на основе изменения смещения содержимого прокрутки относительно верхнего ...

-(void)scrollViewDidScroll:(UIScrollView *)scrollView { 

    if (scrollView.contentOffset.y > 10.0) { 
     // 10 is a little threshold so we won't trigger this on a scroll view 
     // "bounce" at the top. alternatively, you can set scrollView.bounces = NO 
     [self setScrollViewExpanded:YES]; 
    } else if (scrollView.contentOffset.y < 0.0) { 
     [self setScrollViewExpanded:NO]; 
    } 
} 

Редактировать: Я изменил анимацию расширения после повторной проверки моего старого кода. Это должно быть немного сложнее из-за обратной связи по смещению содержимого при изменении кадра. Редактирование не изменяет размер во время анимации, а только начало координат. Он изменяет размер до или после анимации и временно блокирует сообщения делегата. Также обратите внимание, что маска автоматического рельефа прокрутки должна быть настроена для заполнения вида контейнера.

Смежные вопросы