0

状況: ビューの上部にある種のツールバー (UIToolbar ではなく、カスタム UIView のみ) があります。このツールバーにはいくつかのボタンがあります。そのすぐ下に、フォーム付きのスクロールビューがあります。ツールバーのボタンがタップされると、タップされたボタンに応じて、対応するフォームが右または左から画面にアニメーション表示されます。これでツールバーを動かしたくありません。ただし、ユーザーがスクロール ビューを上下にスクロールすると、ツールバーが上にスクロールするようにします。私が今それを達成した方法は、scrollViewDidScrollデリゲートメソッドにあります(ツールバーのボタンを押すことによるものである場合にのみ、水平スクロールを許可することに注意してください):

-(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];
}

ただし、これは非効率的であり、遅延が発生することが懸念されます。私が達成しようとしていることを達成するためのより良い方法があるかどうか疑問に思っています。

一日の終わりに、スクロールビューが水平にスクロールされた場合はツールバーを静止したままにし、スクロールビューが垂直にスクロールされた場合はスクロールビューとともに移動するようにします。

ご提案ありがとうございます。

4

1 に答える 1

1

水平方向の「スクロール」はボタンがタップされた場合にのみ許可されるUIScrollView contentSizeため、幅を画面の幅と高さに適切に設定します。ボタンタップで水平方向に「スクロール」するには、ビューの水平方向の移動をアニメーション化するだけです。

ビュー階層は、現在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;
}];
于 2013-07-06T12:06:28.720 に答える