iOS开发——项目需求-快速回到当前界面的顶部
利用UIWindow实现快速到达顶部
如下图,在状态栏添加一个没有颜色的UIWindow(里面添加一个按钮),实现点击这个按钮时能快速的回到当前界面的顶部

核心代码
一、利用UIWindow实现到达顶部
1、创建一个新的窗口
1)UIWindow的级别,级别越高,越显示在上层(级别高的window盖在级别低的window上面)
UIWindowLevelNormal < UIWindowLevelStatusBar < UIWindowLevelAlert
@interface AppDelegate ()
@property (nonatomic, strong) UIWindow *topWindow;
@end @implementation AppDelegate - (UIWindow *)topWindow{ if (_topWindow == nil) { _topWindow = [[UIWindow alloc] init]; _topWindow.windowLevel = UIWindowLevelAlert;
_topWindow.frame = CGRectMake(, , CHGScreenW, );
_topWindow.backgroundColor = [UIColor clearColor];
// 这句很重要,默认是隐藏的,要想显示必须手动设置为NO
_topWindow.hidden = NO;
[_topWindow addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(topWindowClick)]];
}
return _topWindow;
}
2、遍历每一个窗口
- (void)topWindowClick
{
NSArray *windows = [UIApplication sharedApplication].windows;
for (UIWindow *window in windows) {
// 遍历该窗口下所有子控件
[self searchSubviews:window];
}
}
3、遍历该窗口下所有子控件
/**
* 搜索superview内部的所有子控件
*/
- (void)searchSubviews:(UIView *)superview
{
for (UIScrollView *scrollView in superview.subviews) {
[self searchSubviews:scrollView]; // 判断是否为 scrollView
if (![scrollView isKindOfClass:[UIScrollView class]]) continue; // 判断scrollView是否在窗口上 (是否相交)
// 计算出scrollView在window坐标系上的矩形框
CGRect scrollViewRect = [scrollView convertRect:scrollView.bounds toView:scrollView.window];
CGRect windowRect = scrollView.window.bounds;
// 判断scrollView的边框是否和window的边框交叉
if (!CGRectIntersectsRect(scrollViewRect, windowRect)) continue; // 能来到这里说明scrollView在窗口上,修改偏移量,滚到最顶部
CGPoint offset = scrollView.contentOffset;
offset.y = - scrollView.contentInset.top;
[scrollView setContentOffset:offset animated:YES];
}
}
4、程序激活时主动调用懒加载
// 程序激活的时候调用topWindow
- (void)applicationDidBecomeActive:(UIApplication *)application {
[self topWindow];
}
iOS开发——项目需求-快速回到当前界面的顶部的更多相关文章
- ios开发怎样才能做到代码和界面彻底分离,方便换肤?
设想一下,你现在手底下有N个开发人员,你如何让这些人参与到一个ios开发项目中来?而不是独自一个人完成.
- iOS开发项目之MVC与MVVM
MVC MVC,Model-View-Controller,我们从这个古老而经典的设计模式入手.采用 MVC 这个架构的最大的优点在于其概念简单,易于理解,几乎任何一个程序员都会有所了解,几乎每一所计 ...
- iOS开发——项目篇—高仿百思不得姐
01 一.包装为导航控制器 UINavigationController *nav = [[UINavigationController alloc] initWithRootViewControll ...
- iOS开发项目名称修改
前言:在IOS开发中,有时候想改一下项目的名字,都会遇到很多麻烦.直接改项目名吧,XCODE又不会帮你改所有的名字.总是有很多文件.文件夹或者是项目设置的项.而且都是不能随便改的,有时候改着改着,编译 ...
- iOS开发——项目篇—高仿百思不得姐 05——发布界面、发表文字界面、重识 bounds、frame、scrollView
加号界面(发布模块) 一.点击加号modal出发布模块,创建控件,布局控件1)使用xib加载view,如果在viewDidLoad创建控件并设置frame 那么self.view 的宽高 拿到的是xi ...
- iOS开发项目之一 [ 项目流程]
项目流程 *人员配置 *客户端(iOS工程师,Android工程师) *前端 h5 *后台人员(php,java,net) *提供接口(请求地址.请求参数,请求方式,接口文档) *UI UE * 效果 ...
- iOS开发项目实战——Swift实现图片轮播与浏览
近期開始开发一个新的iOS应用,自己决定使用Swift.进行了几天之后,发现了一个非常严峻的问题.那就是无论是书籍,还是网络资源,关于Swift的实在是太少了,随便一搜全都是OC实现某某某功能.就算是 ...
- iOS开发项目实战——Swift实现ScrollView滚动栏功能
手机作为一个小屏设备,须要显示的信息往往无法在一个屏幕上显示,此时就须要使用到滚动栏,当然除了像TableView这样能够自带滚动功能的. 假设一个界面上View较多,那就必须要使用到ScrollVi ...
- iOS开发——多线程篇——快速生成沙盒目录的路径,多图片下载的原理、SDWebImage框架的简单介绍
一.快速生成沙盒目录的路径 沙盒目录的各个文件夹功能 - Documents - 需要保存由"应用程序本身"产生的文件或者数据,例如:游戏进度.涂鸦软件的绘图 - 目录中的文件会被 ...
随机推荐
- ng-controller event data
$emit只能向parent controller传递event与data $broadcast只能向child controller传递event与data $on用于接收event与data 例子 ...
- Cheminformatic Set
蛋白: 数据库 1. 蛋白晶体结构数据库 http://www.rcsb.org/pdb/home/home.do 2. 蛋白注释数据库 http://www.uniprot.org/ 工具 1. r ...
- FFT质数打表程序
#include<bits/stdc++.h> using namespace std; typedef long long ll; void sol(ll x){ int y=0; fo ...
- Unicode 与 UTF 字符标准
Unicode 国际字符标准(UCS)是一个字符编码系统,它被设计用来支持世界各国不同语言书面文体之间的数据交换.处理以及显示. Unicode用两个字节表示一个字符.前127个字符与A ...
- Myeclipse如何设置字体大小
由于Myeclipse一般是英文版的,这就给英语不太好的人带来了一定的麻烦,有时连设置个字体都无法顺利进行!!! 工具/原料 Myeclipse 方法/步骤 双击启动Myeclipse 点击& ...
- Java排序算法——冒泡排序
import java.util.Arrays; //================================================= // File Name : Bubble_S ...
- win7或win2008 R2 被远程登录日志记录 系统日志
事件查看器 → Windows 日志 → 安全 (win7 事件查看器 打开方式 :计算机 右键 → 管理 → 计算机管理 → 系统工具 → 事件查看器 windows server 2008 ...
- My latest news (--2016.10)
2016.10.31 22:44 一个“程序”,打代码占40%.思考占60% 2016.10.30 20:53 周末,话说今天有晚上讲座,还点名,了,悲催.之前学习的Qt有点问题,悲催.推荐个博文:h ...
- webkit的一些不为人知的高级属性
1.-webkit-tap-highlight-color tap按钮或者链接时,就会出现一个半透明的灰色背景,设置属性: -webkit-tap-highlight-color:transpar ...
- LeetCode —— Invert Binary Tree
struct TreeNode* invertTree(struct TreeNode* root) { if ( NULL == root ) { return NULL; } if ( NULL ...