2013-07-06 255 views
0

情況:我有一個排序工具欄(不是UIToolbar,只是一個自定義的UIView),位於我的視圖頂部。這個工具欄有一些按鈕。緊接着它,我有一個窗體的滾動視圖。當輕擊工具欄上的按鈕時,相應的窗體應該從右側或左側在屏幕上動畫,具體取決於按下哪個按鈕。我不希望工具欄在此上移動。不過,當用戶在滾動視圖上向上或向下滾動時,我確實希望工具欄向上滾動。我現在已經完成了它的方式是在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.centertoolbarView.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; 
}];