【iOS】scrollView滚动时显示 停止时隐藏的view

好的还是这么一个需求……在scrollView滑动的时候出现一个button,停止滑动两秒之后隐藏。
【iOS】scrollView滚动时显示 停止时隐藏的view_第1张图片
就是这么个效果,左侧的小按钮是在滑动的时候才会显示,停止滑动两秒钟就会消失。

这个协议方法是在scrollview将要开始滑动的时候才会触发,而且只有手指操作才会触发
//将要开始滑动
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
    //手指开始拖动
    //标记当前正在一个滑动状态
    self.isScrolling = YES;
    //小播放按钮出现
    self.smallPlayButton.hidden = NO;
    NSLog(@"开始滑动啦");
}
这个方法是在减速动画即将要停止的时候触发
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    //减速动画停止,标记当前滑动状态停止
    self.isScrolling = NO;
    //延迟两秒钟之后隐藏按钮
    dispatch_after(DISPATCH_TIME(2), dispatch_get_main_queue(), ^{
    	//一定要是在停止滑动的状态,因为有的用户会分多下来滑动屏幕
        if(!self.isScrolling) self.smallPlayButton.hidden = YES;
    });
    NSLog(@"停止滑动啦");
}

上面的方法看起来可以解决问题,但是有的用户会有一个习惯:就是一次滑动分成多下操作来完成。滑动一下,手指点住屏幕使减速动画停止,然后继续滑动。或者是直接点击屏幕使减速动画停止。这样的话就不能触发减速动画的协议方法,也就不能使button隐藏。

于是有了第三个方法:

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
    //等于0时是手指拖动突然按住导致没有减速动画
    if (velocity.y == 0.0) {
        NSLog(@"应该停止但没停止哦……");
        //减速动画停止,标记当前状态是停止滑动
        self.isScrolling = NO;
        //延迟两秒
        dispatch_after(DISPATCH_TIME(2), dispatch_get_main_queue(), ^{
            if(!self.isScrolling) self.smallPlayButton.hidden = YES;
        });
    }
}

这个方法是在scrollview停止拖拽的时候触发,其中velocity.y == 0.0的这个条件,是只有在scrollview滑动时突然点住屏幕使它停止下来时才会成立的,感兴趣的同学可以自己尝试一下。

在这里我们将隐藏button的方法添加上,完成!

你可能感兴趣的:(ios问题,iosUI)