1

ユーザーが UITable ビューで Y オフセット 0.0 の下にスクロールすると、(プルダウン メニューのように) UIView をプルダウンしようとしています。ユーザーが -80.0 Y-Offset より下にプルダウンすると、PullDownMenu はユーザーが反対方向にスクロールするまでそれ自体をロックします。

UITableView の ScrollView だけの私の実装は次のとおりです。[最初はlock:false ]

-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if(isChangingOffset)
        return;
    if(resetDrag)
    {
        [self setScrollViewOffset:scrollView offsetTo:CGPointMake(0, -80.0)];
        resetDrag = false;
    }
    float xx = scrollView.contentOffset.y;
NSLog(@"Offset :%f",xx);
    if(xx - begginOffset > 0.0 && lock && !doneDragging)
    {
        offsetChange = xx - begginOffset;
        begginOffset = xx;
        lock = false;
        [self setScrollViewOffset:scrollView offsetTo:CGPointMake(0, -80.0)];
    }
    if(lock){
        [self setScrollViewOffset:scrollView offsetTo:CGPointMake(0, -80.0)];
    }
    if(xx <=-80.0)
    {
        [self setScrollViewOffset:scrollView offsetTo:CGPointMake(0, -80.0)];
        lock = true;
    }
}

- (void)setScrollViewOffset:(UIScrollView *)scrollView offsetTo:(CGPoint)offset{

- (void)setScrollViewOffset:(UIScrollView *)scrollView offsetTo:(CGPoint)offset{
    isChangingOffset = true;
    scrollView.contentOffset = CGPointMake(0, -80.0);
    isChangingOffset = false;
}

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    float x = scrollView.contentOffset.y;
    begginOffset = x;
    doneDragging = false;
    if(lock){
        resetDrag = true;
    }
}

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    doneDragging = true;
}

これがどのように見えるかの作業ビデオです:ビデオ

青色は、UITableView のサブビューとして追加した UIView です。

私の問題は、UIView をプルダウンしようとしているのですが、UITableView の contentOffset に基づいて menuView (tableView のサブビューではない) と呼びましょう。青色のビューを追加したように、UITableView に menuView を追加するだけで済みます。しかし、それはテーブルを介してのみアクセスできます。つまり、上にスクロールして下にドラッグするときです。しかし、いつでも通知センターのように menuView を「プル可能」にしたいのです。スクロール ビューの Y-contentOffset を使用すると、メニュー ビューのプルダウン アニメーションがスムーズになりません。そして、途中で止まったり、下がりすぎたりします。ぎくしゃくしていて、いつも同じではありません。どうすればこれを実装できますか?

4

1 に答える 1

2

ここにあなたのサンプルコードがありますUIScrollView

ViewController.h

@interface ViewController: UIViewController {

    UIScrollView *scrollView;
}

@property (nonatomic, strong) IBOutlet UIScrollView *scrollView;

ViewController.m

@implementation ViewController

@synthesize scrollView;

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        [self scrollView];
    }

    - (void)scrollText{

        [scrollView setContentSize:CGSizeMake(320, 800)];
        scrollView.scrollEnabled = YES;
        scrollView.pagingEnabled = YES;
        scrollView.clipsToBounds = YES;

    }

また、コードまたはインターフェイスビルダーから、必要なワットを配置できます。

PullDownMenu については、次の GitHub を参照してください。

MBPullDownController

これがあなたのコードを簡素化するのに役立つことを願っています;)

于 2013-07-03T11:00:53.300 に答える