转载请注明出处:http://blog.csdn.net/xcysuccess3/
Coretext竖排绘制以及如何绕中心点旋转。以及如何设置字体。
不废话。直接上代码。
// // CustomView.h // testWingdings // // Created by 向晨宇 on 12-12-6. // Copyright (c) 2012年 向晨宇. All rights reserved. // #import <UIKit/UIKit.h> @interface CustomView : UIView { NSString* ns_str; } @property(retain,nonatomic) NSString* ns_str; @end
// CustomView.m // testWingdings // // Created by 向晨宇 on 12-12-6. // Copyright (c) 2012年 向晨宇. All rights reserved. // #import "CustomView.h" #import <CoreText/CoreText.h> #define ARCVIEW_DEFAULT_RADIUS 90.0 @implementation CustomView @synthesize ns_str; - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code self.backgroundColor = [UIColor clearColor]; } return self; } -(void)dealloc { [ns_str release]; [super dealloc]; } -(NSDictionary*) getDicWithFont { float kLabelFontSize = 44.0; CTFontRef ref = CTFontCreateWithName((CFStringRef)@"Arial", kLabelFontSize, NULL); NSMutableDictionary *attrDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:(id)ref, (NSString *)kCTFontAttributeName, nil]; return attrDictionary; } - (void)drawRect:(CGRect)rect { [super drawRect:rect]; NSDictionary* attrDictionary = [self getDicWithFont]; NSMutableAttributedString *attString = [[NSMutableAttributedString alloc] initWithString:ns_str attributes:attrDictionary]; CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSaveGState(context); CGAffineTransform textTransform = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0,0.0, 0.0); CGContextSetTextMatrix(context,textTransform); CGContextTranslateCTM(context, 0, 44); CTLineRef line = CTLineCreateWithAttributedString((CFAttributedStringRef)attString); //9-4 [attString release]; CFArrayRef runArray = CTLineGetGlyphRuns(line); //包装成一个数组 CTRunRef run = (CTRunRef)CFArrayGetValueAtIndex(runArray, 0); CFIndex runGlyphCount = CTRunGetGlyphCount(run); CTFontRef runFont = (CTFontRef)CFDictionaryGetValue(CTRunGetAttributes(run), kCTFontAttributeName); for (CFIndex runGlyphIndex = 0; runGlyphIndex < runGlyphCount; runGlyphIndex++) { CFRange glyphRange = CFRangeMake(runGlyphIndex, 1); CGGlyph glyph; CGPoint position; CTRunGetGlyphs(run, glyphRange, &glyph); CTRunGetPositions(run, glyphRange, &position); CGFontRef cgFont = CTFontCopyGraphicsFont(runFont, NULL); CGContextSetFont(context, cgFont); CGContextSetFontSize(context, CTFontGetSize(runFont)); float ascent_temp = 0.0f; float descent_temp = 0.0f; float leading_temp = 0.0f; NSNumber *widthValue = [NSNumber numberWithDouble:CTRunGetTypographicBounds((CTRunRef)run, CFRangeMake(runGlyphIndex, 1), &ascent_temp, &descent_temp, &leading_temp)]; int width = [widthValue intValue]; int height = ascent_temp+descent_temp+leading_temp; // CGContextSetRGBFillColor(context, 0.9, 0.9, 0.1, 1.0); CGContextSaveGState(context); CGContextSetTextPosition(context, position.x+width/2, position.y + height/2); CGAffineTransform cgTransform2 = CGAffineTransformMakeRotation(90*M_PI/180); CGAffineTransform result=CGAffineTransformConcat(textTransform, cgTransform2); CGContextSetTextMatrix(context, result); CGContextTranslateCTM(context,0, -width-(height-width)/2); CGContextShowGlyphsAtPoint(context, position.x , position.y, &glyph, 1); CGContextRestoreGState(context); CFRelease(cgFont); } CFRelease(line); CGContextRestoreGState(context); } -(UIFont*)customFont {// 你的字体路径 NSString *fontPath = [[NSBundle mainBundle] pathForResource:@"tom" ofType:@"ttf"]; NSURL *url = [NSURL fileURLWithPath:fontPath]; CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL(( CFURLRef)url); if (fontDataProvider == NULL) return nil; CGFontRef newFont = CGFontCreateWithDataProvider(fontDataProvider); CGDataProviderRelease(fontDataProvider); if (newFont == NULL) return nil; NSString *fontName = ( NSString *)CGFontCopyFullName(newFont); UIFont *font = [UIFont fontWithName:fontName size:12]; CGFontRelease(newFont); return font; } @end
字体设置这一块折腾了很久,苹果的CTFontRef陷害了我。这个是强行设置的唯一方法。网上其他很多直接更改列表的都是不对的。那种不能兼容到所有的方法。字体绕中心点旋转也折腾了很久。本来用CONTEXT去平移,但是复杂情况还是不行。最后用矩阵解决。
版权所有:
http://blog.csdn.net/xcysuccess3/
向晨宇
QQ30513207
12月11日,工信部酝酿APP备案的消息在移动互联网界引发轩然大波,有的开发者担忧这一政策会阻碍移动互联网市场发展,有的互联网从业人员质疑工信部的监管能力,甚至有评论直接称APP备案制很二。
多位不愿披露姓名的开发者称,如果每个APP的上线和更新都要备案,这将延缓开发的进程。开发者怀疑称,工信部哪里有那么多人员和精力去审查每个APP?
而金山卓越电脑资讯站、天下网、手机之家、ECSHOP软件创始人@高春辉则直斥这一政策很二。
知名律师赵占领则表示:“对APP还是有必要监管的,涉黄、涉暴、盗版、刷排名等情况很普遍。不过还是要把握好监管的分寸,解决‘不管则乱、一管就死’的问题。 ”
昨日,工信部电信经济专家委员会秘书长陈金桥在接受媒体采访时表示:“工信部正在建立一个长效的评估体系,对智能手机应用程序、内置软件进行评 估和抽查,而且相关的国家实验室和研究院都参与到其中。其次是要将第三方平台纳入管理,成立要备案,运行要监管。而且平台本身的运营也要有所要求,尤其对 个人应用开发者要纳入管理体系,如做实名认证等。”
最近一次MI ONE PLUS 升级之后,又给默认安装了一个应用--应用超市,隔三差五的提示有软件有更新,对于我这个有强迫症的人来说,见不得回收站有东西,见不得这样不和谐的数字直接出现在我的眼皮子下。
长按移动到垃圾箱,提示系统应用不能删除,典型的流氓逻辑行为,赤裸裸的商业行为,都生个孩子了,还在装处女。
由于MI ONE 默认是root过的,所以就有了最高权限。
链接usb,装上驱动,进入sdk,运行adb ,再运行adb devices 发现仅存一个设备,直接adb shell 进入命令行窗口,andoid 默认的shell是mksh,不支持table键补齐。
提示符(PS1)为$,符号,表面当前是以普通用户身份登录,su 切换到root用户,这时提示符为#,代表root用户
执行ls -al ,查看下当前目录下的内容
这下面的文件系统结构和Linux的有些许的不同,但本质没什么不一样
sbin系统管理使用的二进程程序的位置
dev 和sys,是两个驱动管理的虚拟文件系统,dev是2.4内核的,sys是2.6内核新加的
proc是虚拟文件系统,主要是内核中的一些信息
root是root用户的主目录
etc是系统的一些配置文件所在的目录
mnt系统中挂载的目录,用来动态挂载外设的
sdcard 是sd卡的挂载点,是mnt中的子目录一个链接
vendor是第三方,这里主要是手机厂商文件的位置
d是android中的一些驱动文件,是dev下面的一个文件的链接,用于调试用的虚拟驱动
default.prop 是系统中一些默认属性的记录文件
init
init.goldfish.rc
init.qcom.rc
init.qcom.sh
init.rc
init.target.rc
vevent.goldfish.rc
vevent.rc
这些文件,rc是什么,runtime config (?!)google虚拟的arm体系结构,取名为goldfish,金鱼,qcom是高通的缩写
init 是内核启动之后运行的第一个用户进程,手机产品取名为target,平板产品取名为broad,vevent是什么,我还没搞懂
其他的什么acct cache config sd-ext persist 的具体含义,我不懂,以后慢慢了解
另外的system 和data是两个很重要的目录,单独列出来,分别对应了System.img 和data.imge的解压缩文件
取名为系统,当然是一些系统文件了,app,系统安装的应用程序,系统内置的应用就在这里面,想删就删,但前提是你知道他是干什么的,别把通话(ril)
Mms(彩信和sms短信),还有很多provider,总之,除非你清楚知道你在干什么,否则别随便删除
如果你熟悉android系统,这些名字一看就明白了,删除替换,这里面就把miui_supermaket.apk 删掉
rm -f miui_supermaket.apk (注意linux是区分大小写的)
然后重启一下手机,我们的目的就达到了
再回来看看system下面都有些什么东西,
app-----系统内置的应用apk
fonts----系统内置的一些字体文件,矢量字体
media---开机关机启动的动画(也许是位图序列),主题,声音,图片等
bin-------普通用户可以执行的可执行二进制文件,对应到linux系统下面的bin目录
framework----- 主要放的是一些jar包文件
lib-----------------系统中会调用的一些库文件,好像只有so结尾的动态链接库文件
recovery-from-boot.p------是个文件,不熟悉,但看目录大概能猜出意思,用du -sh 查看一下,大小为1.2M
lost+found--------系统异常掉电,之后找回来的一些文件
usr------在linux中,如果自己安装的程序,默认会放在usr/src 下面,当然不是全部的发行版都是这样的
最后xbin,在linux下面如果想启动图形化的环境,使用startx来实现,在配置linux内核时,可以使用make xconfig 来加载图形化的配置界面,此外有个x11什么之后,
扯淡完毕,这里是图形化的一些工具嘛?不是的亲,这里的x是扩展的意思,想想xml吧,是bin文件的扩展部分
加上bin和xbin,基本上在linux下面的工具,基本上都能找到,想想工程目录下面的exetern下面如此庞大,懂的
build.prop----------这个是在make的时候,生成的编译过程中的文件,里面的内容也很值得一看,一些默认属性,紧急号码呀,设备名称啊等等
在来看看data目录
东西很多,找两个熟悉点的
app----------当然是我们自己安装的apk所在的目录
data---------每个apk,会自己建立自己的子目录来保存数据
这里面有很多是空着的
misc--------混杂设备存放的地方,具体什么东西,见名知意
来看看bluetooth下面的有什么好了
数据记录文件,mac地址,其他的格式,不太明白。
再来看看system下面的有些什么东西
呵呵,对password感兴趣,当把目录展开后,发现信息量简直是爆炸式的增长,就先到这里吧
知道的越多,就发现自己不知道的更多。
1楼fristkey2前天 18:19so是动态库。a是静态库,sorry!