详解tintColor属性

tintColor属性是iOS7之后新加的一个属性,这个属性定义了一个非默认的着色颜色值,其值的设置会影响到以视图为根视图的整个视图层次结构。它主要是改变控件的颜色,以获取一些有意思的视觉效果。

  • tintColor属性-  默认情况下,tintColor属性是默认为nil的,当我们设置一个视图的tintColor属性时,他会自动传播到他的子视图的,因此,要设置一个控件的颜色,即就要设置他的父视图的tintColor,当你没有设置tintColor时,系统默认为蓝色。
  • 与tintColor属性相关的还有个tintAdjustmentMode属性,它是一个枚举值,定义了tint color的调整模式。
typedef NS_ENUM(NSInteger, UIViewTintAdjustmentMode) {UIViewTintAdjustmentModeAutomatic,//视图的着色调整模式与父视图一致UIViewTintAdjustmentModeNormal, // 视图的tintColor属性返回完全未修改的视图着色颜色UIViewTintAdjustmentModeDimmed,// 视图的tintColor属性返回一个去饱和度的、变暗的视图着色颜色} NS_ENUM_AVAILABLE_IOS(7_0);

  • tintColorDidChange方法-  这个方法会在视图的tintColor或tintAdjustmentMode属性改变时自动调用。另外,如果当前视图的父视图的tintColor或tintAdjustmentMode属性改变时,也会调用这个方法。我们可以在这个方法中根据需要去刷新我们的视图。

示例:

下面这个图片中是我在故事板中拖得几个控件,其中有按钮,label,滑块,imageView,当然都还没有设置tintColor的

当我把self.view的tintColor改为red时,效果图如下

如上,大家可以看见可以通过改一个tintColor属性可以改很多控件的颜色,当你想要在一款APP中把他所有的控件颜色都改了的话,就可以在APPDelegate里改变window的tintColor,我尝试打印默认的tintColor和tintAdjustmentMode,分别输出了[UIDeviceRGBColorSpace 0 0.478431 1 1]和1,这是在我们没有对整个视图层次结构设置任何tint color相关的值的情况下的输出。可以看到,虽然我们没有设置tintColor,但它仍然返回了系统的默认值;而 tintAdjustmentMode则默认返回Normal的原始值。

    NSLog(@"%@",self.view.tintColor);NSLog(@"%ld",self.view.tintAdjustmentMode);self.view.tintColor = [UIColor redColor];

可能有些同学看到这儿纳闷了,不是说tintColor可以改变子视图的颜色吗?怎么上面的label和imageView的颜色怎么没改呢,这个问题呢,其实很简单,我们可以通过重写tintColorDidChange这个方法来监测tintColor的变化,当self.View的tintColor颜色改变时,可以设置label字体的颜色。imageView的颜色没改的原因是我们没有设置图片的imageWithRenderingMode属性为AlwaysTemplate

转载于:https://www.cnblogs.com/tmf-4838/p/5380433.html

iOS开发之tintColor属性详解相关推荐

  1. iOS开发之Accounts框架详解

    2019独角兽企业重金招聘Python工程师标准>>> iOS开发之Accounts框架详解 Accounts框架是iOS原生提供的一套账户管理框架,其支持Facebook,新浪微博 ...

  2. Android 开发之EditText属性详解

    EditText & TextView 属性详解: android:layout_gravity="center_vertical" 设置控件显示的位置:默认top. an ...

  3. edtext 从右边开始输入 安卓_Android开发之EditText属性详解

    1.EditText输入的文字为密码形式的设置 (1)通过.xml里设置: 把该EditText设为:android:password="true" // 以".&quo ...

  4. Android开发之EditText属性详解+++ImageView的属性

    Button的使用 不要阴影Button ---> TextView   (5.0新特性) <!-- 去按钮立体效果 --> <item name="android: ...

  5. android中oncreate方法,android开发之onCreate( )方法详解

    这里我们只关注一句话:This is where you should do all of your normal static set up.其中我们只关注normal static, normal ...

  6. android idata 模式,Android快速开发之appBase——(3).详解IHolder和IData

    Android快速开发之appBase--(3).详解IHolder和IData IHolder和IData是AVLib的两个组件,在前面已经使用过了,那么这一篇将会详细说明这两个组件的用法. IHo ...

  7. Android快速开发之appBase——(4).详解com.snicesoft.Application和BaseActivity

    转载请注明本文出自JFlex的博客http://blog.csdn.net/jflex/article/details/46441571,请尊重他人的辛勤劳动成果,谢谢! Android快速开发之ap ...

  8. android开发之onCreate( )方法详解

    android开发之onCreate( )方法详解 onCreate( )方法是android应用程序中最常见的方法之一,那么,我们在使用onCreate()方法的时候应该注意哪些问题呢? 先看看Go ...

  9. 安卓开发之IPC机制详解

    IPC(Inter-Process Communication),意为进程间通信或者跨进程通信,是指两个进程之间进行数据交换的过程.前面在学习Handler机制时提到过线程与进程的概念,在安卓中一个进 ...

最新文章

  1. ImageView / Text 使用 android:state_pressed 没有效果的处理方法
  2. Java的正则表达式使用及案例
  3. 数据可视化配色指南:三大配色方法,做出咨询报告一样的图表丨附在线工具资源...
  4. java随机抽题系统_在用java做一个在线考试系统,随机抽题遇到了问题,我写了一个随机抽题的方法,不知道在asp按钮中怎么用...
  5. junit 测试执行顺序_JUnit 5中的测试执行顺序
  6. asp: menu 父级选中
  7. 九章云极DataCanvas完成C轮融资:定义标准化AI基础架构未来
  8. react在组件内插入标签_javascript – 如何将css类添加到react中的组件?
  9. pku 1321 棋盘问题 DFS
  10. 进程间通信---共享内存 ftok shmat shmget shmdt shmctl
  11. Java Synchronized的用法
  12. 在mysql中怎么存储表情符号,如何在MySQL数据库中存储表情符号字符
  13. 阿里巴巴矢量图标 iconfont 下载图标分辨率小一点、并占得内存小一点呢
  14. 传输层 可靠传输 连续ARQ协议和滑动窗口协议
  15. 麦克风阵列语音增强(一)
  16. 一行代码统计文本中指定字符串出现的次数
  17. 游戏服务器级别分类及对应服务器架构
  18. 关于以太坊 雷电网络 的思考
  19. MII,RMII,GMII接口详细介绍
  20. 用python处理水仙花数

热门文章

  1. C# http监听之Nancy.net
  2. Google 开源下一代高安全性机密运算开发框架 Asylo
  3. OpenWrt分支LEDE嵌入式无线路由系统定制-1.编辑环境搭建
  4. 方法论:怎样练习一万小时
  5. 使用SVN clang: error: linker command failed with exit code 1 (use -v to see invocation)
  6. windows和linux 修改 hosts的路径
  7. 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手
  8. 杭州街头惊现“梦想改造家”,ATM取款区变废为宝
  9. volatile关键字使用总结
  10. Jenkins+git 实现代码自动发布