首页 文章

根据UIScrollView的内容偏移量移动UIView

提问于
浏览
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;
}

这是一个关于它的外观的工作视频:Video

蓝色是我在UITableView中作为子视图添加的UIView .

我的问题是,我试图拉下一个UIView,让我们根据UITableView的contentOffset调用它的menuView(不是tableView的子视图) . 我可以简单地在UITableView中添加menuView,就像我添加了蓝色视图一样 . 但这只能通过表格访问,也就是当我滚动到顶部并向下拖动时 . 但我希望menuView可以随时像通知中心一样“拉动” . 在使用滚动视图的Y-contentOffset时,菜单视图下拉动画不平滑 . 它会中途停止或过低 . 它是生涩的,并不总是一样的 . 我该如何实现呢?

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

    而且你可以从代码或界面构建器中放入你想要的wat .

    对于PullDownMenu,你可以看到这个GitHub:

    MBPullDownController

    希望这可以帮助您并简化您的代码;)

相关问题