ユーザーが 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 を使用すると、メニュー ビューのプルダウン アニメーションがスムーズになりません。そして、途中で止まったり、下がりすぎたりします。ぎくしゃくしていて、いつも同じではありません。どうすればこれを実装できますか?