转自: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

最新文章

  1. 冰冻三尺非一日之寒--jQuery
  2. Twitter全局唯一ID生成算法
  3. linux jdk bin安装
  4. java PropertyChangeSupport委托帧听类的使用
  5. java异步上传图片
  6. Java - 静态代理详讲
  7. 《DOM Scripting》学习笔记-——第四章 案列分析 JS美术馆(点击链接到图片)
  8. notepad去掉空行
  9. C# 里调用vb的inputbox弹出窗
  10. ado.net介绍
  11. Windows Visual Studio中修改PostgreSQL代码后调试报错
  12. 标准web浏览器的组件
  13. nginx 配置静态资源路径(url不同于static path)
  14. 浅谈nodejs中HTTP模块应用
  15. angularjs 常用功能练习
  16. Windows系统中Oracle11g R2 版本数据库卸载
  17. 十八、IntelliJ IDEA 常用快捷键 之 Windows 版
  18. @RequestParam 注解的使用
  19. mysql 8 安装及更改密码
  20. linux 环境下tomcat中部署jfinal项目

热门文章

  1. cocos2dx 3.0研究(1)-- hello world程序
  2. 机器学习: 神经网络中的Error函数
  3. Python学习 —— 阶段综合练习三
  4. rqnoj-208-奥运火炬到厦门-dp
  5. go语言基础之普通函数的调用流程
  6. javascript学习笔记------概念相关
  7. 在JavaScript文件中读取properties文件的方法
  8. [88221008]调用新下单接口失败,result:162020004,resInfo
  9. 解密SVM系列(四):SVM非线性分类原理实验
  10. JQuery EasyUI 动态改变表单项的验证守则