在公司上个版本的开发中遇到了一个UI布局的小问题:

某个页面需要增加一个分享按钮,但是该页面是二级页面,导航栏右边也已经放置了2个button。
起初和老大谈论这个问题的时候想到的方法是导航栏右边加三个button得了~但是一回想,这貌似太丑了!虽然两人都不是处女座,不过这个方法算是pass掉了
当天下班前想起浏览网页的时候经常会在滑动的时候右下方出现一个“回到顶部”的按钮,似乎在iOS客户端也可以实现这一类似的功能。

原理:获取到keywindow,然后在keywindow上面添加一个bgView,在bgView上面加上一个UIButton(之所以这样包装一层是为了美观一点,想将shareBtn弄成圆型)

    - (void)createShareBtn{UIButton *shareBtn = [UIButton buttonWithType:UIButtonTypeCustom];shareBtn.frame = CGRectMake(0, 0, 40, 40);[shareBtn setImage:[UIImage imageNamed:@"wright"] forState:UIControlStateNormal];[shareBtn addTarget:self action:@selector(shareBtnAction) forControlEvents:UIControlEventTouchUpInside];bgView = [[UIView alloc] initWithFrame:CGRectMake(kScreen_width-50, kScreen_height/2-64, 40, 40)];bgView.backgroundColor = [UIColor whiteColor];bgView.alpha = .9;bgView.layer.cornerRadius = 20;bgView.layer.masksToBounds = YES;[bgView addSubview:shareBtn];// 获取keyWindowUIWindow *keywindow = [UIApplication sharedApplication].keyWindow;[keywindow addSubview:bgView];}- (void)shareBtnAction{//创建分享视图[self shareView];}

有一点需要注意:即如果我们这样设置了,那么需要进行下一步操作(在视图pop的时候,移除shareBtn),否则shareBtn会一直显示在keywindow上面

    - (void)viewWillDisappear:(BOOL)animated{[super viewWillDisappear:animated];// 这里bgView是全局的[bgView removeFromSuperview];}

当然还有一点

细心的同学会发现我在bgView设置了alpha值为0.9,这样依然会遮挡住下面的视图,影响用户浏览

为此我做了如下设置:
1、值得说一下的是,整个二级页面的层级结构是
UIViewController-->webView
2、让我们来看看webView里有一些什么我们可以用到的:

@interface UIWebView : UIView <NSCoding, UIScrollViewDelegate>
@property (nullable, nonatomic, assign) id <UIWebViewDelegate> delegate;
@property (nonatomic, readonly, strong) UIScrollView *scrollView NS_AVAILABLE_IOS(5_0);

对于UIScrollViewDelegate大家应该不陌生了

    #pragma mark - UIScrollViewDelegate- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{bgView.alpha = .45;}- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{bgView.alpha = .9;}

当然一定不要忘了签约:webView.scrollView.delegate = self;
对于- (void)createShareBtn方法的调用随大家需求所定

1、如果需要长期显示,可以在- (void)viewDidLoad方法里调用(此处还有一个小技巧:createShareBtn在createWebView之后?)
2、如果只是在滑动时显示,可以在UIScrollViewDelegate的代理方法里调用

希望能帮助大家(ps:为什么不直接加在webView上呢?博主前段时候在群里看到小伙伴讨论keywindow,然后心血来潮想试试keywindow而已?)
暂贴一张手机录的GIF图~


当然说一个与本文无关的,关于UIWindow的题外话:

不要滥用UIWindow!不要滥用!不滥用!(重要的事说三遍?)

通过创建UIWindow,我们很容易地实现了将某个特定界面置于最上层的效果,但是这种特性不应该被滥用。很多时候,如果弹出界面明显属于某一个ViewController,那么更适合把弹出的界面当做这个ViewController的view的subView来实现。
常见的滥用方式是把需要的弹出界面都设置成单例,需要的时候就调用显示。这种做法会使得新创建的UIWindow一直得不到释放。并且当出现多个UIWindow需要相互有层级覆盖关系时,实现起来比较复杂。
---《iOS开发进阶》


转载于:https://www.cnblogs.com/knightguang/p/9605934.html

在UIWindow上加类似于“回到顶部”的按钮相关推荐

  1. html 两个idv上下居中,Django搭建个人博客:回到顶部浮动按钮、矢量图标、页脚沉底和粘性侧边栏...

    本章集中介绍四个重要的小功能:回到顶部浮动按钮.矢量图标.页脚沉底和粘性侧边栏. 这几个功能与Django基本没啥关系,更多的是前端知识,但是对博客网站都很重要,问的读者也比较多,因此也集中讲一下好了 ...

  2. php 回到顶部,jquery如何实现点击网页回到顶部效果?(图文+视频)

    本篇文章主要给大家介绍如何用jquery代码实现网页回到顶部的效果. 我们在浏览各大网站页面时,想必大家肯定都遇到过,当阅览一个长页面时,拉到下面部分会出现类似回到顶部的按钮特效吧. 这种点击回到顶部 ...

  3. 一款回到顶部的 jQuery 插件,支持 Div 中的滚动条回到顶部

    前言 今天在网上搜索"回到顶部"的 jQuery 插件,网上有很多,但是大部分都不支持让 Div 中的滚动条回到顶部.于是乎,不放弃,自己参考 Github 上的一个 jQuery ...

  4. BackToTop.js 为你的网站添加“回到顶部”按钮

    图片来源:Inspiring Wallpapers 就像上图中的超人一样,你的读者也想要一飞冲天的感觉. 没错,你的网站需要一个 "回到顶部" 的按钮. 每当你的文章写得很长,或者 ...

  5. 回到顶部效果之加速置顶

    我在半年前接触过相关案例,最近重新看了一下,添加了详尽的注释,希望对初学者能有所帮助. <!doctype html> <html> <head> <meta ...

  6. better-scroll的封装实现回到顶部按钮

    better-scroll的封装实现回到顶部按钮 话不多说先上效果: 实现better-scroll封装之前,先了解better-scroll的使用初始化等操作[better-scroll初始化] b ...

  7. vue 返回滚动条顶部组件_vue中回到顶部

    1. 回到顶部,使用 scrollIntoView 方法: Element.scrollIntoView方法滚动当前元素,进入浏览器的可见区域 该方法可以接受一个布尔值作为参数.如果为true,表示元 ...

  8. 兼容IE,chrome 等所有浏览器 回到顶部代码

    今天在博客园看到一片帖子回到顶部代码,索性就看了下,但是发现在非IE浏览器下可以运行,在IE浏览器下却运行不了. 故将其代码搬弄过来做了些许修改后,完美支持了IE下的运行. 主要实现功能代码文件: & ...

  9. 小程序制作回到顶部按钮

    我们先看一下效果吧,直接上图. 第一种情况,当页面在顶部的时候,回到顶部按钮是不会出现的. 第二种情况,当页面在离开顶部一定距离的时候,回到顶部按钮出现 接下就是对代码的分析了: 在这里我们如果要使用 ...

最新文章

  1. JZOJ 5286. 【NOIP2017提高A组模拟8.16】花花的森林
  2. I've got so many hongbaos(should it be translated as red bags?)
  3. 服务器cpu虚拟插槽,服务器更换cpu插槽
  4. [转载] Python语言程序设计基础(第二版)嵩天等课后习题答案
  5. React 页面渲染后自动执行onClick事件问题
  6. ShareX(截图工具) 绿色版,功能异常强大
  7. 牛顿莱布尼茨计算机公式,牛顿莱布尼茨公式
  8. Flutter 学习与性能优化总结
  9. TorchScript的TracedModule和ScriptModule的区别
  10. php实例-微信第三方登录
  11. 敏捷领导力2.0培训体会
  12. wps linux 无法输入中文,WPS for linux 中不能切换到中文输入法
  13. 二叉树的层序遍历(二)---之字形层序遍历
  14. PAT甲级1005 Spell it Right 【20】【字符串操作】
  15. linux安装nginx并配置域名映射和图片服务器
  16. java web数据库查询_Java Web开发之信息查询方式总结
  17. 网络游戏《丛林战争》开发与学习之(四):游戏客户器端的功能开发(上)
  18. win7腾讯会议点开没反应/打不开(有进程无窗口)的解决方法
  19. 鸿海的面板工厂再陷亏损,夏普电视难与中国电视竞争?
  20. ABP 动态 WebApi 隐藏接口的方法(二)

热门文章

  1. Linux基础知识汇总(2)...持续更新中
  2. 【Python】向函数传递任意数量的实参
  3. JS实现继承的几种方法
  4. 关于Centos下Clamv反病毒软件包更新问题
  5. Windows Phone实用开发技巧(32):照片角度处理
  6. NeHe OpenGL第三十五课:播放AVI
  7. 利用 JQuery的load函数动态加载页面
  8. c++面试题中经常被面试官面试的小问题总结(一)(本篇偏向基础知识)
  9. 国贫县山西永和:“一揽子”保险“保”脱贫
  10. python全栈开发笔记---------函数