iPhone How-to:如何调整UIView的Z-Order
转自:http://bj007.blog.51cto.com/1701577/541572
在界面设计中,最终用户看到的呈现通常是由不同层的视图组成的,通过控制视图的层次就可以实现不同的效果和功能。而视图的层次也通常被称为Z-Order或者Z-Index(如下图)。在很多UI库中,一个视图的Z-Order通常都是通过自身相关的一些接口实现,但iPhone为了细分视图中父控件和子控件之间的责任,将这部分功能划分到了父控件实现。这样如果要将一个视图置于最上面,原来可能只需要view.bringToFront(),在iPhone中就需要 view.superView.bringToFront(view)。这样的间接让一部分人(包括我自己)感觉到不习惯,为此我们可以给UIView添加一个Z-Order相关的Category以避免了这种间接,这样我们就可以用我们习惯的方式来控制视图的Z-Order了。
UIView的Z-Order Category的代码如下:
声明:
@interface UIView (Z-Order)
-(int)getSubviewIndex;
-(void)bringToFront;
-(void)sendToBack;
-(void)bringOneLevelUp;
-(void)sendOneLevelDown;
-(BOOL)isInFront;
-(BOOL)isAtBack;
-(void)swapDepthsWithView:(UIView*)swapView;
@end
实现:
@implementation UIView(Z-Order)
-(int)getSubviewIndex
{
return [self.superview.subviews indexOfObject:self];
}
-(void)bringToFront
{
[self.superview bringSubviewToFront:self];
}
-(void)sendToBack
{
[self.superview sendSubviewToBack:self];
}
-(void)bringOneLevelUp
{
int currentIndex = [self getSubviewIndex];
[self.superview exchangeSubviewAtIndex:currentIndex withSubviewAtIndex:currentIndex+1];
}
-(void)sendOneLevelDown
{
int currentIndex = [self getSubviewIndex];
[self.superview exchangeSubviewAtIndex:currentIndex withSubviewAtIndex:currentIndex-1];
}
-(BOOL)isInFront
{
return ([self.superview.subviews lastObject]==self);
}
-(BOOL)isAtBack
{
return ([self.superview.subviews objectAtIndex:0]==self);
}
-(void)swapDepthsWithView:(UIView*)swapView
{
[self.superview exchangeSubviewAtIndex:[self getSubviewIndex] withSubviewAtIndex:[swapView getSubviewIndex]];
}
@end
iPhone How-to:如何调整UIView的Z-Order相关推荐
- iphone自适应屏幕亮度_如何在iPhone或iPad上调整屏幕亮度
iphone自适应屏幕亮度 Khamosh Pathak Khamosh Pathak Your iPhone or iPad is pretty good at automatically adju ...
- 全代码编写的iPhone界面源码1 UIView UILabel UIButton
这个界面全部都是用代码编写的,其中并没有使用到图片.也没有使用Interface Builder和Storyboard. 如果要看源码请看这里: http://blog.sina.com.cn/s/b ...
- linux 窗口z order,wxPython窗口z-order设置
使用wxpython写的界面程序其实也是可以设置Z-order的. 可以使用pywin32模块调用win32的API实现,使用方法不在赘述. 如果仅仅是想将窗口置顶(放在其他窗口上面,Z-order顶 ...
- iPhone与iPad开发实战读书笔记
iPhone开发一些读书笔记 手机应用分类 1.教育工具 2.生活工具 3.社交应用 4.定位工具 5.游戏 6.报纸和杂志的阅读器 7.移动办公应用 8.财经工具 9.手机购物应用 10.风景区相关 ...
- Android窗口管理服务WindowManagerService计算窗口Z轴位置的过程分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8570428 通过前面几篇文章的学习,我们知道了 ...
- iPhone 7 256GB版停售原因分析
对于苹果来说,iPhone新版本发布后,旧款进行调整是理所应当的事情,所以iPhone 7各种被和谐也是情理之中的事情. 据美国媒体报道称,苹果在iPhone 8发布前就已经对iPhone 7进行了调 ...
- iPhone 14仅两款Pro版搭载A16芯片 另外两款继续使用A15
3月14日消息,据国外媒体报道,在苹果的iPhone 12和iPhone 13系列手机中,基本款和高端版在摄像头.屏幕等多个方面存在明显区别,进而导致在价格方面也有较大的差距. 而在苹果产品预测方面有 ...
- 苹果可折叠iPhone有望在2023年推出 支持手写笔
9月19日消息,据国外媒体报道,在三星华为等厂商推出多款可折叠的智能手机之后,外界也在关注目前高端智能手机市场霸主的苹果,会在何时推出可折叠iPhone. 对于可折叠iPhone,此前也曾有过报道.去 ...
- 苹果支付35亿元和解iPhone“降速门”:国内用户又被忽略了
每逢新款iPhone发布,就到了旧款iPhone的速度变慢的时候,这已经是许多iPhone手机用户的共识了. 苹果自己也承认过,为了防止设备意外关机,为了保护设备,在必要时限制了某些旧型号iPhone ...
最新文章
- Mybatis源码阅读(三):结果集映射3.2 —— 嵌套映射
- Maven 建立父子项目和跨项目调用内容的步骤
- Windows “七大奇迹”:DNS Dynamic Updates 中的7个严重漏洞
- 如何成为Java开发工程师?
- BZOJ1938: [CROATIAN2010] ALADIN
- 用简单Mask分类实现语义分割、实例分割“大一统”!FacebookUIUC开源MaskFormer
- svn使用方法以及使用教程
- VC2012编译protobuf出错处理
- Linux dstat 监控工具
- 一种标准地图服务转矢量Shapefile方法
- Java数字转换大写
- 计算机的坚果云怎么删除,如何删除坚果云残留图标
- 急需你的意见:句子迷图文日签投票
- 华硕主板怎么进入bios
- 2022-10-17 环境映射
- 正常计算机的c盘空间多大,往往C盘剩余空间多少为宜
- 2021年如何低成本开启创业?
- Ubuntu18.04 realsenseD435i深度摄像头外参标定的问题
- 外贸电子商务网站的网络广告推广方案
- Linux系统小惊喜:开往2022虎年的小火车
热门文章
- platform平台工作原理
- Linux_Makefile模板
- maven netbeans 导入_Maven - NetBeans
- 【python教程入门学习】Python零基础入门爬虫项目
- linux终端运行pytorch,Linux虚拟机测试pytorch运行
- pb 修改数据窗口种指定字段位置_如何在PB数据窗口中修改数据---设置数据窗口的更新属性...
- gradle 指定springcloud 版本_SpringCloud微服务架构开发实战:实现服务注册与发现
- java中unknown source_java中GUI编程中的unknown source问题
- SPI通信协议:单片机spi通信接口什么意思,spi接口干什么用的?
- 硬件重要还是软件重要?一个人能同时学会吗?