zoukankan      html  css  js  c++  java
  • 在TableView上添加悬浮按钮

      如果直接在TableVIewController上贴Button的话会导致这个会随之滚动,下面解决在TableView上实现位置固定悬浮按钮的两种方法:

      1.在view上贴tableView,然后将悬浮按钮贴在view的最顶层

      2.使用window

    首先看一下最终的效果,在tableViewController上添加一个悬浮按钮,该按钮不能随着视图的滚动而滚动

       

    首先介绍上面的第一种方法:

    1)创建tableview和底部按钮的属性

    //屏幕宽

    #define kScreenW [UIScreen mainScreen].bounds.size.width

    //屏幕高

    #define kScreenH [UIScreen mainScreen].bounds.size.height

    @interface broadcastLiveViewController ()<UITableViewDataSource, UITableViewDelegate>

    @property(nonatomic) UITableView *livesListTable;

    @property(nonatomic) UIButton *bottomButton;

    @end

    2)创建属性到最顶部

    @implementation broadcastLiveViewController

    - (void)viewDidLoad {

        [super viewDidLoad];

      CGRect clientRect = [UIScreen mainScreen].bounds;

      _livesListTable = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, clientRect.size.width, clientRect.size.height-65) style:UITableViewStylePlain];

        [self.view addSubview:_livesListTable];

        _livesListTable.delegate = self;

        _livesListTable.dataSource = self;

     self.bottomButton = [UIButton buttonWithType:UIButtonTypeCustom];

        self.bottomButton.frame = CGRectMake(kScreenW - 80, kScreenH - 140, 60, 60);

        [self.bottomButton setBackgroundImage:[UIImage imageNamed:@"recordLive"] forState:UIControlStateNormal];

        [self.bottomButton addTarget:self action:@selector(onTapLiveBtn) forControlEvents:UIControlEventTouchUpInside];

        [self.view addSubview:self.bottomButton];

     3)实现按钮事件

    - (void)onTapLiveBtn

    {

        NSLog(@"点击底部按钮");

    }

    接下来介绍第二种方法:

    1)创建一个window,button属性避免window被释放

    //屏幕宽

    #define kScreenW [UIScreen mainScreen].bounds.size.width

    //屏幕高

    #define kScreenH [UIScreen mainScreen].bounds.size.height

    @interface broadcastLiveViewController ()<UITableViewDataSource, UITableViewDelegate>

    @property(strong,nonatomic)UIWindow *window;

    @property(strong,nonatomic)UIButton *button;

    @end

    2)创建window和button

     默认的情况下系统只有一个window这时我们需要设置windowLevel

    window不用添加在任何视图上

     - (void)createButton{

        _button = [UIButton buttonWithType:UIButtonTypeCustom];
         [_button setBackgroundImage:[UIImage imageNamed:@"recordLive"] forState:UIControlStateNormal];
        _button.frame = CGRectMake(0, 0, 60, 60);
        [_button addTarget:self action:@selector(onTapLiveBtn) forControlEvents:UIControlEventTouchUpInside];
        _window = [[UIWindow alloc]initWithFrame: CGRectMake(kScreenW - 80, kScreenH - 80, 60, 60);];
        _window.windowLevel = UIWindowLevelAlert+1;
        _window.backgroundColor = [UIColor redColor];
        _window.layer.cornerRadius = 30;
        _window.layer.masksToBounds = YES;
        [_window addSubview:_button];
        [_window makeKeyAndVisible];//关键语句,显示window
    }

    3)延时加载window,注意我们需要在rootWindow创建完成之后再创建这个悬浮的按钮
    - (void)viewDidLoad {
        [super viewDidLoad];
        [self performSelector:@selector(createButton) withObject:nil afterDelay:1];  
    }
    4)实现按钮事件

    - (void)onTapLiveBtn

    {

        NSLog(@"点击底部按钮");

    }

    
    
    注意::最后再添加一个小功能,使tableview上下滑动的时候,按钮动画效果的出现和消失,在这里是上拉消失,下拽出现

    -(void)scrollViewDidScroll:(UIScrollView *)scrollView{

        if (scrollView.contentOffset.y > self.offsetY && scrollView.contentOffset.y > 0) {//向上滑动

            //按钮消失

            [UIView transitionWithView:self.bottomButton duration:0.1 options:UIViewAnimationOptionTransitionNone animations:^{

                self.bottomButton.frame = CGRectMake(kScreenW - 80, kScreenH - 65, 60, 60);

            } completion:NULL]; 

        }else if (scrollView.contentOffset.y < self.offsetY ){//向下滑动

            //按钮出现

            [UIView transitionWithView:self.bottomButton duration:0.1 options:UIViewAnimationOptionTransitionNone animations:^{

                self.bottomButton.frame = CGRectMake(kScreenW - 80, kScreenH - 140, 60, 60);

            } completion:NULL];

        }

        self.offsetY = scrollView.contentOffset.y;//将当前位移变成缓存位移

    }

     

     

     

     

  • 相关阅读:
    dijkstra 为什么不能解决负权边?
    Asteroids poj3041
    Dining poj3281
    炮兵阵地
    玉米田Corn Fields
    互不侵犯
    Golang---内存管理(内存分配)
    单例模式-Singleton
    HTTP2.0 学习
    Golang---GMP调度策略
  • 原文地址:https://www.cnblogs.com/jingxin1992/p/6051610.html
Copyright © 2011-2022 走看看