使用Quartz绘制带阴影的圆角图
来源:互联网 发布:网络质量 编辑:程序博客网 时间:2024/04/30 21:01
最近在做iOS开发的时候,遇到这样的需求:需要开发一个高度自适应的控件,背景使用图案平铺,控件下方两个角为圆角,控件的下边有5像素宽的阴影。具体如图所示:
方案A
在做这个需求时首先想到是用colorWithPatternImage
来平铺图片,然后使用CALayer添加阴影。
不过这样做的严重缺陷是阴影被裁切掉了。
方案B
所以考虑使用Quartz的CGContextDrawTiledImage
来平铺背景,使用layer制造阴影。
这样做虽然可以大概的实现需求,不过阴影的宽度不可控制。
方案C
于是我尝试使用Quartz的CGContextSetShadowWithColor
来绘制阴影,但是怎么绘制阴影呢?使用CGContextDrawTiledImage
平铺背景时会占满指定的区域,这样也有没有了绘制阴影的空间。
在stackoverflow搜索了一圈,有人建议先使用固定色填充圆角区域,再在这个区域平铺图片。
这个方案比上个方案好了很多,不过细心的人可能会发现圆角的阴影有深色的锯齿,不够协调。原因是阴影是根据固定色生成的,在处理边界过度时是从固定色过度来的。
方案D
那有没有办法让阴影根据图片来生成呢?我想到了CGContextDrawImage
方法。先在一个特殊的context
生成平铺图,然后在当前的context
使用CGContextDrawImage
来绘制图片,这样绘制图片的同时会产生相应的阴影。
结语
作为初学者,对Quartz也只是一知半解。尝试过程中发现绘制的时候一定要注意顺序,否则会出现各种奇怪的问题。Quartz是个强大东西,要好好利用还需跟多的尝试。
另附上本文的源代码:https://github.com/ohsc/CodeBox-of-Cocoa/tree/master/RoundedCornerImageWithShadow
四个方案运行效果图:
- 使用Quartz绘制带阴影的圆角图
- Android使用XML Shape绘制带阴影效果的圆形按钮
- Android使用XML Shape绘制带阴影效果的圆形按钮
- Android使用XML Shape绘制带阴影效果的圆形按钮
- Android使用XML Shape绘制带阴影效果的圆形按钮
- 微信小程序例子——使用画布组件绘制一个带阴影及下划线的文字
- Android使用XML Shape绘制带阴影效果的圆形按钮
- 使用quartz2D绘制阴影的代码
- 用Drawable XML绘制带阴影效果的圆形按钮
- 用Drawable XML绘制带阴影效果的圆形按钮
- 带阴影的表格
- 带阴影的TextView
- [多媒体、图形、动画] 使用quartz2D绘制阴影的代码
- Android开发:用Drawable XML绘制带阴影效果的圆形按钮
- Android开发:用Drawable XML绘制带阴影效果的圆形按钮
- <转>Android开发:用Drawable XML绘制带阴影效果的圆形按钮
- 安卓UI学习(1)--绘制带阴影的按钮
- Android开发:用Drawable XML绘制带阴影效果的圆形按钮
- iphone ios layer 教程应用
- Datalist翻页(不用第三方控件,自己写翻页代码)
- Bluetooth
- multiple keyboard shortcuts
- Changes to the Meta-Object System in Qt 5
- 使用Quartz绘制带阴影的圆角图
- 客户端操作,实现文件的上传、下载、和删除
- HDU 3518
- SQL server语言基础(三)
- paip.vs2010 开发ASP浏览时的设置
- GPS
- java,hibernate和sql server对应的数据类型
- android 手机拍照上传项目的开发-----Camera1.0(动态显示预览)
- android开发相关软件地址