2013-07-06 2 views
0

Ситуация: У меня есть панель инструментов (а не UIToolbar, только пользовательский UIView), который находится в верхней части моего представления. На этой панели инструментов есть несколько кнопок. Сразу же ниже, у меня есть scrollview с формой. Когда нажата кнопка на панели инструментов, соответствующая форма должна быть анимирована на экране справа или слева, в зависимости от того, какая кнопка нажата. Я не хочу, чтобы панель инструментов двигалась по этому пути. Тем не менее, я хочу, чтобы панель инструментов прокручивалась вверх, когда пользователь прокручивается вверх или вниз по экрану прокрутки. Путь я достиг сейчас находится в методе scrollViewDidScroll делегата (обратите внимание, я только разрешить горизонтальную прокрутку, если это от нажатия кнопки на панели инструментов):Стратегии UIScrollView для горизонтальной и вертикальной прокрутки

-(void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    if(scrollView.contentOffset.x != 0 && _shouldScrollHorizontally == NO) 
    { 
     CGPoint offset = scrollView.contentOffset; 
     offset.x = 0; 
     scrollView.contentOffset = offset; 
    } 

    CGRect buttonFrame = [_buttons frame]; 

    buttonFrame.origin.y = -scrollView.contentOffset.y + 10; 

    [_buttons setFrame:buttonFrame]; 
} 

Однако я обеспокоен тем, что это неэффективно и приведет к некоторой задержке. Мне интересно, есть ли лучший способ достичь того, чего я пытаюсь достичь.

В конце дня я хочу, чтобы панель инструментов оставалась неподвижной, если прокрутка прокручивается по горизонтали, но перемещаться с помощью прокрутки, если прокрутка прокручивается по вертикали.

Спасибо за любые предложения!

+0

вы имеете в виду вы хотите графику, как старый пульс, или postpiks. – rptwsthi

+0

Что это значит? – Mason

ответ

1

Поскольку горизонтальная «прокрутка» разрешена только при нажатии кнопки, установите ширину окна на ширину экрана и его высоту. Для «прокрутки» по горизонтали на кранах кнопок просто анимируйте перемещение вида по горизонтали.

Иерархия представлений будет чем-то вроде outerView, который представляет собой ширину и высоту того, что вы устанавливаете в настоящий момент UIScrollView contentSize. Ваш просмотр прокрутки является подзаголовком outerView, а панель инструментов является подзором вида прокрутки.

Для анимации горизонтального движения, то, как правило, легче всего изменить outerView.center и toolbarView.center, что-то вроде:

CGPoint newCenterPoint; 
CGPoint newToolbarCenterPoint; 

CGPoint centerPoint1 = // set center as appropriate 
CGPoint centerPoint2 = // set center as appropriate 
CGPoint centerPoint3 = // set center as appropriate 

CGPoint toolbarCenter1 = // set center as appropriate 
CGPoint toolbarCenter2 = // set center as appropriate 
CGPoint toolbarCenter3 = // set center as appropriate 

if (buttonTapped == button1) { 
    newCenterPoint = centerPoint1; 
    newToolbarCenterPoint = toolbarCenter1; 
} else if (buttonTapped == button2){ 
    newCenterPoint = centerPoint2; 
    newToolbarCenterPoint = toolbarCenter2; 
} else if (buttonTapped == button3){ 
    newCenterPoint = centerPoint3; 
    newToolbarCenterPoint = toolbarCenter3; 
} 
[UIView animateWithDuration:0.25 animations:^{ 
    outerView.center = newCenterPoint; 
    toolbarView.center = newToolbarCenterPoint; 
}]; 
Смежные вопросы