当前位置:  编程技术>移动开发
本页文章导读:
    ▪浅析CoreText自由绘制(4)-竖排绘制-怎么绕中心点旋转-怎么强行设置字体        浅析CoreText自由绘制(4)-竖排绘制-如何绕中心点旋转-如何强行设置字体转载请注明出处:http://blog.csdn.net/xcysuccess3/    Coretext竖排绘制以及如何绕中心点旋转。以及如何设置字体。    不废.........
    ▪ 工信部要求 APP 立案引发担忧        工信部要求 APP 备案引发担忧 12月11日,工信部酝酿APP备案的消息在移动互联网界引发轩然大波,有的开发者担忧这一政策会阻碍移动互联网市场发展,有的互联网从业人员质疑工信部的监管.........
    ▪ 删除MI_ONE_PLUS 下面的应用超市       删除MI_ONE_PLUS 上面的应用超市          最近一次MI ONE PLUS  升级之后,又给默认安装了一个应用--应用超市,隔三差五的提示有软件有更新,对于我这个有强迫症的人来说,见不得回收站.........

[1]浅析CoreText自由绘制(4)-竖排绘制-怎么绕中心点旋转-怎么强行设置字体
    来源: 互联网  发布时间: 2014-02-18
浅析CoreText自由绘制(4)-竖排绘制-如何绕中心点旋转-如何强行设置字体

转载请注明出处: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


    
[2] 工信部要求 APP 立案引发担忧
    来源: 互联网  发布时间: 2014-02-18
工信部要求 APP 备案引发担忧

12月11日,工信部酝酿APP备案的消息在移动互联网界引发轩然大波,有的开发者担忧这一政策会阻碍移动互联网市场发展,有的互联网从业人员质疑工信部的监管能力,甚至有评论直接称APP备案制很二。

多位不愿披露姓名的开发者称,如果每个APP的上线和更新都要备案,这将延缓开发的进程。开发者怀疑称,工信部哪里有那么多人员和精力去审查每个APP?

而金山卓越电脑资讯站、天下网、手机之家、ECSHOP软件创始人@高春辉则直斥这一政策很二。

知名律师赵占领则表示:“对APP还是有必要监管的,涉黄、涉暴、盗版、刷排名等情况很普遍。不过还是要把握好监管的分寸,解决‘不管则乱、一管就死’的问题。 ”

昨日,工信部电信经济专家委员会秘书长陈金桥在接受媒体采访时表示:“工信部正在建立一个长效的评估体系,对智能手机应用程序、内置软件进行评 估和抽查,而且相关的国家实验室和研究院都参与到其中。其次是要将第三方平台纳入管理,成立要备案,运行要监管。而且平台本身的运营也要有所要求,尤其对 个人应用开发者要纳入管理体系,如做实名认证等。”


    
[3] 删除MI_ONE_PLUS 下面的应用超市
    来源: 互联网  发布时间: 2014-02-18
删除MI_ONE_PLUS 上面的应用超市

          最近一次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!

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
网络技术 iis7站长之家
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3