Quartz 2D编程指南(9) -- 透明层

来源:互联网 发布:ai软件基础教程视频 编辑:程序博客网 时间:2024/06/07 01:28
    透明层(TransparencyLayers)通过组合两个或多个对象来生成一个组合图形。组合图形被看成是单一对象。当需要在一组对象上使用特效时,透明层非常有用,如图9-1所示的给三个圆使用阴影的效果。

 

如果没有使用透明层来渲染图9-1中的三个圆,对它们使用阴影的效果将是如图9-2所示:

 

透明层的工作方式
Quartz的透明层类似于许多流行的图形应用中的层。层是独立的实体。Quartz维护为每个上下文维护一个透明层栈,并且透明层是可以嵌套的。但由于层通常是栈的一部分,所以我们不能单独操作它们。

我们通过调用函数CGContextBeginTransparencyLayer来开始一个透明层,该函数需要两个参数:图形上下文与CFDictionary对象。字典中包含我们所提供的指定层额外信息的选项,但由于Quartz 2D API中没有使用字典,所以我们传递一个NULL。在调用这个函数后,图形状态参数保持不变,除了alpha[默认设置为1]、阴影[默认关闭]、混合模式[默认设置为normal]、及其它影响最终组合的参数。

在开始透明层操作后,我们可以绘制任何想显示在层上的对象。指定上下文中的绘制操作将被当成一个组合对象绘制到一个透明背景上。这个背景被当作一个独立于图形上下文的目标缓存。

当绘制完成后,我们调用函数CGContextEndTransparencyLayerQuartz将结合对象放入上下文,并使用上下文的全局alpha值、阴影状态及裁减区域作用于组合对象。

在透明层中进行绘制


在透明层中绘制需要三步:
1. 调用函数CGContextBeginTransparencyLayer
2. 在透明层中绘制需要组合的对象
3. 调用函数CGContextEndTransparencyLayer

9-3显示了在透明层中绘制三个矩形,其中将这三个矩形当成一个整体来渲染阴影。

 

代码清单9-1显示了如何利用透明层生成图9-3所示的矩形。

复制代码
  1. void MyDrawTransparencyLayer (CGContext myContext, float wd,float ht)
  2. {
  3.     CGSize          myShadowOffset = CGSizeMake (10, -20);
  4.     CGContextSetShadow (myContext, myShadowOffset, 10);   
  5.     CGContextBeginTransparencyLayer (myContext, NULL);
  6.     // Your drawing code here
  7.     CGContextSetRGBFillColor (myContext, 0, 1, 0, 1);
  8.     CGContextFillRect (myContext, CGRectMake (wd/3+ 50,ht/2 ,wd/4,ht/4));
  9.     CGContextSetRGBFillColor (myContext, 0, 0, 1, 1);
  10.     CGContextFillRect (myContext, CGRectMake (wd/3-50,ht/2-100,wd/4,ht/4));
  11.     CGContextSetRGBFillColor (myContext, 1, 0, 0, 1);
  12.     CGContextFillRect (myContext, CGRectMake (wd/3,ht/2-50,wd/4,ht/4));
  13.     CGContextEndTransparencyLayer (myContext);
  14. }
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 短信在桌面没了怎么办 先锋影音ios没了怎么办 砚台里墨汁干了怎么办 浮石打错了想换怎么办 全蛋打发不起来怎么办 裱花剩下的奶油怎么办 打过头的淡奶油怎么办 淡奶油发过了怎么办 打好的蛋清有水怎么办 想戒烟却坚持不了怎么办 给淮山弄的很痒怎么办 淮山接触皮肤痒怎么办 洗山药后手很痒怎么办 公司老板跑路了怎么办 小工厂老板跑路怎么办 学生医保卡丢了怎么办 在私企年龄大了怎么办 百度网盘上传慢怎么办 百度云盘上传慢怎么办 手机qq打字闪退怎么办 苹果5s手机闪退怎么办 手机qq总是闪退怎么办 qq邮箱密码忘了怎么办 qq加不了群怎么办视频 孩子好几天不大便怎么办 宝宝7天没有大便怎么办 40天小孩不拉屎怎么办 40多天婴儿便秘怎么办 小孩拉绿色稀便怎么办 5岁好几天不拉屎怎么办 2个月宝宝不大便怎么办 两月宝宝不拉屎怎么办 好几天没大便了怎么办 初生婴儿便秘解不出大便怎么办 小孩大便拉不出来怎么办 新生儿3天没大便怎么办 新生儿5天没大便怎么办 小孩好几天不大便怎么办 婴儿10天不拉屎怎么办 3岁大便拉不出来怎么办 孩子大便拉不出来怎么办