如何让IOS中的文本实现3D效果
2015-07-29 21:01
896 查看
本转载至 http://bbs.aliyun.com/read/181991.html?spm=5176.7114037.1996646101.25.p0So7c&pos=9 | ![]() |
![]() ![]() zhedianshi 级别: 帮帮团 ![]() 发帖487云币430 加关注 写私信 | 只看楼主 更多操作楼主 发表于: 2014-06-10 我想要在IOS中对一些文本进行3D效果渲染,使用了UIKit和标准视图控制器。 实现之的效果大概能成为这样: 能不能通过iOS和UIKit实现?我只用了一个静态PNG图片,文本内容根据用户数据变化。 |
关键词: ios开发 3D效果 第46期:北京云栖大会、钉钉、快速黑洞、码农成长日记 分享到淘江湖新浪QQ微博QQ空间开心人人豆瓣网易微博百度鲜果白社会飞信 回复引用 举报 |
![]() ![]() 深白色 级别: 小白 ![]() 发帖23云币45 加关注 写私信 | 只看该作者沙发 发表于: 2014-06-10 Re如何让IOS中的文本实现3D效果 提供一个方法,不断的重复画文本的layer,创建有层次的效果: 创建UIImage Category,命名为UIImage+3d.h文件: 复制代码 // // UIImage+3D.h // // Created by Lefteris Haritou on 12/10/12. // Feel Free to use this code, but please keep the credits // #import <UIKit/UIKit.h> @interface UIImage (Extensions) + (UIImage *)create3DImageWithText:(NSString *)_text Font:(UIFont*)_font ForegroundColor:(UIColor*)_foregroundColor ShadowColor:(UIColor*)_shadowColor outlineColor:(UIColor*)_outlineColor depth:(int)_depth; @end .m文件: 复制代码 // // UIImage+3D.m // // Created by Lefteris Haritou on 12/10/12. // Feel Free to use this code, but please keep the credits // #import "UIImage+3D.h" @implementation UIImage (Extensions) + (UIImage *)create3DImageWithText:(NSString *)_text Font:(UIFont*)_font ForegroundColor:(UIColor*)_foregroundColor ShadowColor:(UIColor*)_shadowColor outlineColor:(UIColor*)_outlineColor depth:(int)_depth { //calculate the size we will need for our text CGSize expectedSize = [_text sizeWithFont:_font constrainedToSize:CGSizeMake(MAXFLOAT, MAXFLOAT)]; //increase our size, as we will draw in 3d, so we need extra space for 3d depth + shadow with blur expectedSize.height+=_depth+5; expectedSize.width+=_depth+5; UIColor *_newColor; UIGraphicsBeginImageContextWithOptions(expectedSize, NO, [[UIScreen mainScreen] scale]); CGContextRef context = UIGraphicsGetCurrentContext(); //because we want to do a 3d depth effect, we are going to slightly decrease the color as we move back //so here we are going to create a color array that we will use with required depth levels NSMutableArray *_colorsArray = [[NSMutableArray alloc] initWithCapacity:_depth]; CGFloat *components = (CGFloat *)CGColorGetComponents(_foregroundColor.CGColor); //add as a first color in our array the original color [_colorsArray insertObject:_foregroundColor atIndex:0]; //create a gradient of our color (darkening in the depth) int _colorStepSize = floor(100/_depth); for (int i=0; i<_depth; i++) { for (int k=0; k<3; k++) { if (components[k]>(_colorStepSize/255.f)) { components[k]-=(_colorStepSize/255.f); } } _newColor = [UIColor colorWithRed:components[0] green:components[1] blue:components[2] alpha:CGColorGetAlpha(_foregroundColor.CGColor)]; //we are inserting always at first index as we want this array of colors to be reversed (darkest color being the last) [_colorsArray insertObject:_newColor atIndex:0]; } //we will draw repeated copies of our text, with the outline color and foreground color, starting from the deepest for (int i=0; i<_depth; i++) { //change color _newColor = (UIColor*)[_colorsArray objectAtIndex:i]; //draw the text CGContextSaveGState(context); CGContextSetShouldAntialias(context, YES); //draw outline if this is the last layer (front one) if (i+1==_depth) { CGContextSetLineWidth(context, 1); CGContextSetLineJoin(context, kCGLineJoinRound); CGContextSetTextDrawingMode(context, kCGTextStroke); [_outlineColor set]; [_text drawAtPoint:CGPointMake(i, i) withFont:_font]; } //draw filling [_newColor set]; CGContextSetTextDrawingMode(context, kCGTextFill); //if this is the last layer (first one we draw), add the drop shadow too and the outline if (i==0) { CGContextSetShadowWithColor(context, CGSizeMake(-2, -2), 4.0f, _shadowColor.CGColor); } else if (i+1!=_depth){ //add glow like blur CGContextSetShadowWithColor(context, CGSizeMake(-1, -1), 3.0f, _newColor.CGColor); } [_text drawAtPoint:CGPointMake(i, i) withFont:_font]; CGContextRestoreGState(context); } UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return finalImage; } @end 导入category扩展然后如下使用: 复制代码 UIImage *my3dImage = [UIImage create3DImageWithText:@"3" Font:[UIFont systemFontOfSize:250] ForegroundColor:[UIColor colorWithRed:(200/255.f) green:(200/255.f) blue:(200/255.f) alpha:1.0] ShadowColor:[UIColor blackColor] outlineColor:[UIColor colorWithRed:(225/255.f) green:(225/255.f) blue:(225/255.f) alpha:1.0] depth:8]; UIImageView *imgView = [[UIImageView alloc] initWithImage:my3dImage]; [self.view addSubview: imgView]; |
相关文章推荐
- [iOS]在NavigationController中的ScrollView中的子视图都会下移64个像素
- 收集关于iOS编程的优秀博客(不定时更新)
- iOS开发之导航栏Navigation Controller的使用
- iOS 心形绘制
- iOS设计模式 - 原型
- IOS的后台的持续定位
- iOS中内存管理问题
- ios 易用库
- iOS 打开扬声器以及插入耳机的操作
- iOS dSYM文件结构剖析(上)
- IOS 常用View属性设置
- iOS开发-关闭/收起键盘方法总结
- iOS界面调试工具 Reveal
- ios 工程代码整理
- iOS正则表达式(三)
- IOS--开发基础知识
- IOS--文件管理NSFileManager
- iOS系统 越狱系统还原(平刷)
- iOS开发——动画编程OC篇&(五)动画组
- 关于iOS 请求乱码问题 (改变编码方式为GBK)