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
最新文章
- 冰冻三尺非一日之寒--jQuery
- Twitter全局唯一ID生成算法
- linux jdk bin安装
- java PropertyChangeSupport委托帧听类的使用
- java异步上传图片
- Java - 静态代理详讲
- 《DOM Scripting》学习笔记-——第四章 案列分析 JS美术馆(点击链接到图片)
- notepad去掉空行
- C# 里调用vb的inputbox弹出窗
- ado.net介绍
- Windows Visual Studio中修改PostgreSQL代码后调试报错
- 标准web浏览器的组件
- nginx 配置静态资源路径(url不同于static path)
- 浅谈nodejs中HTTP模块应用
- angularjs 常用功能练习
- Windows系统中Oracle11g R2 版本数据库卸载
- 十八、IntelliJ IDEA 常用快捷键 之 Windows 版
- @RequestParam 注解的使用
- mysql 8 安装及更改密码
- linux 环境下tomcat中部署jfinal项目
热门文章
- cocos2dx 3.0研究(1)-- hello world程序
- 机器学习: 神经网络中的Error函数
- Python学习 —— 阶段综合练习三
- rqnoj-208-奥运火炬到厦门-dp
- go语言基础之普通函数的调用流程
- javascript学习笔记------概念相关
- 在JavaScript文件中读取properties文件的方法
- [88221008]调用新下单接口失败,result:162020004,resInfo
- 解密SVM系列(四):SVM非线性分类原理实验
- JQuery EasyUI 动态改变表单项的验证守则