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

Posted

技术标签:

【中文标题】根据 UIScrollView 的内容偏移量移动 UIView【英文标题】:Move a UIView based on the content offset for UIScrollView 【发布时间】:2013-07-03 10:01:40 【问题描述】:

当用户在 UITable 视图中滚动到 0.0 的 Y 偏移量以下时,我正在尝试下拉 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)减速

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

这是一个工作视频:Video

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

我的问题是,我正在尝试下拉一个 UIView,让我们根据 UITableView 的 contentOffset 将其称为 menuView(这不是 tableView 的子视图)。我可以像添加蓝色视图一样在 UITableView 中简单地添加 menuView。但这只能通过表格访问,即当我滚动到顶部并将其向下拖动时。但我希望 menuView 在任何时候都像通知中心一样“可拉动”。 在使用滚动视图的 Y-contentOffset 时,menuview 下拉动画不流畅。它中途停止或过低。这是生涩的,并不总是一样的。我该如何实现呢?

【问题讨论】:

我认为最好将所有内容嵌入UIScrollView 更简单,执行速度更快,您可以设置上下浮动,分页和更多功能,如果您愿意,我给您一个示例UIScrollView的代码 一个包含 UIView 和一个 UITableView 的滚动视图? 一个 ScrollView 是一个带有滚动的视图,可以包含你想要的内容,另一个视图,TableView,按钮,标签,文本字段等等,你可以设置一个滚动视图 Long 5000px 并分页到 480 或 568 ;) ned 代码? 但这将如何帮助我创建一个类似系统的下拉菜单? 您可以使用 UiScrollView 在点击按钮时显示下拉菜单,或者在我的回答中查看下拉菜单,我会向您发布带有示例代码的链接 【参考方案1】:

这里是您的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

希望这对您有所帮助并简化您的代码;)

【讨论】:

我认为 UITableView 已经实现了 UIScrollView。这也不会帮助我实现下拉菜单之类的通知中心,或者类似于视频中的下拉菜单。还是我错过了什么? 很可能您必须重新构建应用程序,但我相信vimeo.com/bukovinski/mbpulldowncontroller 可以帮助您,我的答案 MBPullDownController 上的链接是视频的完整项目代码;)

以上是关于根据 UIScrollView 的内容偏移量移动 UIView的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 最大和最小内容偏移量?

UIScrollView 内容偏移量会阻塞用户交互

预测减速后 UIScrollView 中的静止偏移量

UIAccelerometer 和 UIScrollView

UIScrollView setContentOffset:(0,0) 改变视图?

显示模态后移动视图 - 可能与 AutoLayout 相关