Air*_*Ltd 771 fonts cocoa-touch ios
这个问题涉及iOS 3.2之前的版本.从3.2开始,使用下面的samvermette答案很容易实现这个功能,我已经改变了接受的答案(从命令到samvermette)以反映这一点.我不能赞同这两个答案(除了upvotes),但它们都很好.
我想有一个应用程序包括一个自定义字体用于渲染文本,加载它,然后使用标准UIKit元素,如UILabel.这可能吗?
我在下面找到了链接:
但是这些要求我自己渲染每个字形,这有点太辛苦了,特别是对于多行文本.
我也发现帖子直截了当地表示这是不可能的,但没有理由,所以我正在寻找一个确定的答案.
编辑 - UIKit实验失败
我下载了Harrowprint.tff(从这里下载)并将其添加到我的Resources目录和项目中.然后我尝试了这段代码:
__PRE__
导致抛出异常.查看Finder中的TTF文件,确认字体名称为Harrowprint.
编辑 - 到目前为止已经有很多回复告诉我阅读关于X或Y的文档.我已经对所有这些进行了广泛的实验并且无处可去.在一个案例中,X结果仅与OS X相关,而不是在iPhone上.因此,我正在为这个问题设置一个赏金,我将奖励给第一个提供答案的人(仅使用文档化的API),他们会回答足够的信息以便在设备上运行.在模拟器上工作也是一个奖励.
编辑 - 似乎赏金自动奖励得票最多的答案.有趣.实际上没有人提供解决问题的答案 - 涉及编码自己的UILabel子类的解决方案不支持自动换行,这对我来说是一个必不可少的功能 - 尽管我想我可以扩展它来做到这一点.
sam*_*tte 644
iOS 3.2及更高版本支持此功能.直接来自iPhone OS 3.2 doc中的新功能:
自定义字体支持
想要使用自定义字体的应用程序现在可以在其应用程序包中包含这些字体,并通过在其Info.plist文件中包含UIAppFonts键来向系统注册这些字体.此键的值是一个字符串数组,用于标识应用程序包中的字体文件.当系统看到密钥时,它会加载指定的字体并使其可供应用程序使用.
一旦设置了字体Info.plist,就可以将自定义字体用作IB中的任何其他字体或以编程方式使用.
Apple开发者论坛上有一个持续的主题:
https://devforums.apple.com/thread/37824(需要登录)
这是一个非常简单的3步教程,介绍如何实现这一目标(删除断开的链接)
Info.plist文件中添加一个名为的密钥UIAppFonts.UIAppFonts数组的项目Info.plist[UIFont fontWithName:@"CustomFontName" size:12]以获取与UILabels和UITextViews等一起使用的自定义字体...另外:确保字体在Copy Bundle Resources中.
com*_*nda 299
编辑:从iOS 3.2开始,此功能是内置的.如果您需要支持3.2之前的版本,您仍然可以使用此解决方案.
我创建了一个扩展UILabel和处理加载.ttf文件的简单模块.我在Apache许可下发布了opensource并将它放在github Here上.
重要文件是FontLabel.h和FontLabel.m.
它使用了Genericrich的一些代码.
要么
将您的字体文件复制到资源中
在Info.plist文件中添加一个名为UIAppFonts的密钥.("申请提供的字体)
将此键设为数组
对于您拥有的每种字体,请输入字体文件的全名(包括扩展名)作为UIAppFonts数组的项目
保存 Info.plist
现在,在您的应用程序,你可以简单地调用[UIFont fontWithName:@"CustomFontName" size:15]来获得与您使用的自定义字体UILabels和UITextViews等...
ale*_*xey 116
有一种在iOS 4中使用自定义字体的简单方法.
Chalkduster.ttf)添加到XCode中项目的Resources文件夹中.info.plist并添加一个名为的新密钥UIAppFonts.此键的类型应为数组.Chalkduster.ttf).[UIFont fontWithName:@"Chalkduster" size:16]在您的应用程序中使用.不幸的是,IB不允许使用自定义字体初始化标签.看到这个问题来解决这个问题.我最喜欢的解决方案是使用自定义UILabel子类:
@implementation CustomFontLabel
- (id)initWithCoder:(NSCoder *)decoder
{
if (self = [super initWithCoder: decoder])
{
[self setFont: [UIFont fontWithName: @"Chalkduster" size: self.font.pointSize]];
}
return self;
}
@end
Run Code Online (Sandbox Code Playgroud)
bde*_*dev 51
在Info.plist中添加条目"由应用程序提供的字体"并将字体名称包括为字符串:
Fonts provided by application
Item 0 myfontname.ttf
Item 1 myfontname-bold.ttf
...
Run Code Online (Sandbox Code Playgroud)
然后通过运行检查以确保包含您的字体:
for (NSString *familyName in [UIFont familyNames]) {
for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
NSLog(@"%@", fontName);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,您的ttf文件名可能与设置标签字体时使用的名称不同(可以使用上面的代码获取"fontWithName"参数):
[label setFont:[UIFont fontWithName:@"MyFontName-Regular" size:18]];
Run Code Online (Sandbox Code Playgroud)
rpe*_*ich 36
编辑:从iOS3.2开始,此答案已不存在; 使用UIAppFonts
我能够成功加载自定义UIFonts 的唯一方法是通过私有GraphicsServices框架.
以下将加载.ttf应用程序主包中的所有字体:
BOOL GSFontAddFromFile(const char * path);
NSUInteger loadFonts()
{
NSUInteger newFontCount = 0;
for (NSString *fontFile in [[NSBundle mainBundle] pathsForResourcesOfType:@"ttf" inDirectory:nil])
newFontCount += GSFontAddFromFile([fontFile UTF8String]);
return newFontCount;
}
Run Code Online (Sandbox Code Playgroud)
加载字体后,可以像使用Apple提供的字体一样使用它们:
NSLog(@"Available Font Families: %@", [UIFont familyNames]);
[label setFont:[UIFont fontWithName:@"Consolas" size:20.0f]];
Run Code Online (Sandbox Code Playgroud)
甚至可以在运行时加载GraphicsServices,以防API在将来消失:
#import <dlfcn.h>
NSUInteger loadFonts()
{
NSUInteger newFontCount = 0;
NSBundle *frameworkBundle = [NSBundle bundleWithIdentifier:@"com.apple.GraphicsServices"];
const char *frameworkPath = [[frameworkBundle executablePath] UTF8String];
if (frameworkPath) {
void *graphicsServices = dlopen(frameworkPath, RTLD_NOLOAD | RTLD_LAZY);
if (graphicsServices) {
BOOL (*GSFontAddFromFile)(const char *) = dlsym(graphicsServices, "GSFontAddFromFile");
if (GSFontAddFromFile)
for (NSString *fontFile in [[NSBundle mainBundle] pathsForResourcesOfType:@"ttf" inDirectory:nil])
newFontCount += GSFontAddFromFile([fontFile UTF8String]);
}
}
return newFontCount;
}
Run Code Online (Sandbox Code Playgroud)
Dim*_*lov 34
使用iOS 8+和Xcode 6+,您可以轻松完成此操作.以下是步骤:
1)将您的字体拖放到XcodeSupporting Files文件夹.不要忘记在添加到目标部分标记您的应用.从这一刻起,您可以使用此字体IB并从字体托盘中选择它.

2)要在您的设备中使用此字体,请打开info.plist并添加Fonts provided by application密钥.它将包含Item 0键,您必须添加您的字体名称作为值.字体名称可能与您的字体文件名不同.但首先,尝试在大多数情况下添加您的文件名.

如果没有,这篇文章总是帮助我.
以下是本文代码的快速摘录,以帮助您找到您的字体名称.
func allFonts(){
for family in UIFont.familyNames(){
println(family)
for name in UIFont.fontNamesForFamilyName(family.description)
{
println(" \(name)")
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想提一下,您需要将字体文件添加到Target的Build Phases,Copy Bundle Resources.没有它,您将无法在设备上看到您的字体.它可能会导致意外行为.
例如,我遇到一个bug,当UITextField有自定义字体时,但这个字体不在Copy Bundle Resources中.当我viewcontroller使用此功能时,在调用函数textfield之前会有大约4秒的延迟viewDidLoad.解决字体问题消除了此延迟.所以,建议检查两次.(rdar:// 20028250)顺便说一下,我无法重现这个bug,但我确定问题出现在字体上.
Gen*_*ich 27
我这样做了:
加载字体:
- (void)loadFont{
// Get the path to our custom font and create a data provider.
NSString *fontPath = [[NSBundle mainBundle] pathForResource:@"mycustomfont" ofType:@"ttf"];
CGDataProviderRef fontDataProvider = CGDataProviderCreateWithFilename([fontPath UTF8String]);
// Create the font with the data provider, then release the data provider.
customFont = CGFontCreateWithDataProvider(fontDataProvider);
CGDataProviderRelease(fontDataProvider);
}
Run Code Online (Sandbox Code Playgroud)
现在,在你的drawRect:,做这样的事情:
-(void)drawRect:(CGRect)rect{
[super drawRect:rect];
// Get the context.
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClearRect(context, rect);
// Set the customFont to be the font used to draw.
CGContextSetFont(context, customFont);
// Set how the context draws the font, what color, how big.
CGContextSetTextDrawingMode(context, kCGTextFillStroke);
CGContextSetFillColorWithColor(context, self.fontColor.CGColor);
UIColor * strokeColor = [UIColor blackColor];
CGContextSetStrokeColorWithColor(context, strokeColor.CGColor);
CGContextSetFontSize(context, 48.0f);
// Create an array of Glyph's the size of text that will be drawn.
CGGlyph textToPrint[[self.theText length]];
// Loop through the entire length of the text.
for (int i = 0; i < [self.theText length]; ++i) {
// Store each letter in a Glyph and subtract the MagicNumber to get appropriate value.
textToPrint[i] = [[self.theText uppercaseString] characterAtIndex:i] + 3 - 32;
}
CGAffineTransform textTransform = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0);
CGContextSetTextMatrix(context, textTransform);
CGContextShowGlyphsAtPoint(context, 20, 50, textToPrint, [self.theText length]);
}
Run Code Online (Sandbox Code Playgroud)
基本上你必须在文本中做一些暴力循环并用魔术数字来寻找你的偏移量(在这里,请看我用29),但是它有效.
此外,您必须确保该字体是合法嵌入的.大多数都不是,并且有律师专门研究这类事情,所以要警告.
Aug*_*ust 20
是的,您可以包含自定义字体.请参阅有关UIFont的文档,特别是fontWithName:size:方法.
1)确保在资源文件夹中包含该字体.
2)字体的"名称"不一定是文件名.
3)确保您拥有使用该字体的合法权利.通过将其包含在您的应用中,您还可以分发它,并且您需要有权这样做.
小智 20
如果你正在使用xcode 4.3,您必须添加font到Build Phase下Copy Bundle Resources,根据/sf/users/90498061/在线程,自定义字体的Xcode 4.3.这对我有用,这里是我在我的应用程序中使用自定义字体的步骤:
OTF(或TTF)文件拖放到我创建的新组中,并接受xcode的选择copying the files over to the project folder.UIAppFonts数组,并将字体列为数组中的项目.只是names,而不是扩展(例如" GothamBold"," GothamBold-Italic").project name顶部的方式Project Navigator.Build Phasesxcode主区域中显示的选项卡.Copy Bundle Resources"部分,然后单击"+"以添加字体."+".add to the project.556*_*566 12
这是一步一步说明如何做到这一点.无需额外的库或任何特殊编码.
http://shang-liang.com/blog/custom-fonts-in-ios4/
大多数情况下,问题在于字体而不是方法.最好的方法是使用肯定会起作用的字体,如verdana或geogia.然后更改为预期的字体.如果它不起作用,可能是字体名称不正确,或者字体不是格式良好的字体.
Sub*_*rat 12
在现有iOS应用程序上添加新字体非常容易.
您只需将字体(例如font.ttf)添加到资源文件夹中即可.
打开你的申请info.plist.将新行添加为"由应用程序提供的字体",并将字体名称键入为font.ttf.
当设置字体时,请执行 setFont:"corresponding Font Name"
您可以检查是否添加了字体NSArray *check = [UIFont familyNames];.
它返回应用程序支持的所有字体.
Col*_*ris 11
我建议您按照我最喜欢的简短教程之一:http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/从中获取此信息.
第1步 - 将您的.ttf或.otf从Finder拖到您的项目中
注意 - 确保单击主应用程序目标上的"添加到目标"框
如果您忘记单击将其添加到目标,然后单击项目层次结构中的字体文件,并在右侧面板上单击目标成员资格部分中的主应用程序目标
要确保您的字体是应用程序目标的一部分,请确保它们显示在Build Phases中的Copy Bundle Resources中
第2步 - 将字体文件名添加到Plist
转到信息部分中的自定义iOS目标属性,并为该部分中的项目添加一个键(您应该在键入时看到它作为一个选项,它会将自己设置为一个数组.单击小箭头打开数组项并输入您添加的.ttf或.otf文件的名称,让您的应用知道这些是您想要的字体文件Fonts provided by application
注意 - 如果您的应用程序在此步骤后立即崩溃,请检查您在此处添加的项目的拼写
第3步 - 找出字体的名称,以便您可以调用它们
通常,应用程序看到的字体名称与您认为基于该字体的文件名的字体名称不同,将其放在代码中并查看应用程序生成的日志,以查看代码中要调用的字体名称
迅速
for family: String in UIFont.familyNames(){
print("\(family)")
for names: String in UIFont.fontNamesForFamilyName(family){
print("== \(names)")
}
}
Run Code Online (Sandbox Code Playgroud)
目标C.
for (NSString* family in [UIFont familyNames]){
NSLog(@"%@", family);
for (NSString* name in [UIFont fontNamesForFamilyName: family]){
NSLog(@" %@", name);
}
}
Run Code Online (Sandbox Code Playgroud)
您的日志应如下所示:
第4步 - 使用步骤3中的名称使用新的自定义字体
迅速
label.font = UIFont(name: "SourceSansPro-Regular", size: 18)
Run Code Online (Sandbox Code Playgroud)
目标C.
label.font = [UIFont fontWithName:@"SourceSansPro-Regular" size:18];
Run Code Online (Sandbox Code Playgroud)
小智 10
在finder中找到TTF并"获取信息".在"全名:"标题下,它给了我一个我随后使用的名称fontWithName(我只是复制并粘贴了确切的名称,在这种情况下,不需要'.ttf'扩展名).
它尚未推出,但下一版本的cocos2d(2d游戏框架)将支持可变长度位图字体作为字符映射.
http://code.google.com/p/cocos2d-iphone/issues/detail?id=317
作者没有确定此版本的发布日期,但我确实看到一个帖子表明它将在下个月或两个月内发布.
也许作者忘了给这个字体一个Mac FOND名字?
您也可以尝试在导出对话框中输入"Apple"选项.
免责声明:我不是iPhone开发人员!
我一直在iOS 3.1.2上尝试这个页面上的各种建议,这些是我的结论:
您只需通过[UIFont fontWithName:size:]在资源目录中的字体将无法正常工作,即使酒足饭饱名称使用FontForge设置.
[UIFont fontWithName:size:]如果首先使用GSFontAddFromFile加载字体,它将起作用.但GSFontAddFromFile它不是iOS 3.1.2的一部分,所以它必须按照@rpetrich的描述动态加载.
按照这一步
1)在项目中复制字体
2).plist以源代码模式打开文件...(注意 - 不要打开info.plist)
3)在此之前 - 右键单击您的字体并在fontforge或类似的编辑器中打开它 install,它应该在您的系统中install
4)键入此
<key>UIAppFonts</key>
<array>
<string>MyriadPro.otf</string>
</array>
Run Code Online (Sandbox Code Playgroud)
5)在您的代码中键入此代码 class .m
[lblPoints setFont:[UIFont fontWithName:@"Myriad Pro" size:15.0]];
Run Code Online (Sandbox Code Playgroud)
这里lblPoints将会改变你的 UILabel
完成!如果您的字体仍无效,请先检查字体兼容性
对于iOS 3.2及更高版本:使用上面几个提供的方法,它们是:
[UIFont fontWithName:@"Real Font Name" size:16]在您的应用中使用.但 "真实字体名称"并不总是您在Fontbook中看到的那个.最好的方法是询问您的设备它看到的字体以及确切的名称.
我使用uifont-name-grabber发布在: uifont-name-grabber
只需将您想要的字体放入xcode项目,将文件名添加到其plist,然后在您正在构建的设备上运行它,它将使用您UIFont fontWithName:期望的名称通过电子邮件向您发送完整的字体列表.
我已将此页面上的一些建议合并到iOS 5上适合我的内容中.
首先,您必须将自定义字体添加到项目中.然后,您需要遵循@iPhoneDev的建议并将字体添加到info.plist文件中.
完成后,这有效:
UIFont *yourCustomFont = [UIFont fontWithName:@"YOUR-CUSTOM-FONT-POSTSCRIPT-NAME" size:14.0];
[yourUILabel setFont:yourCustomFont];
Run Code Online (Sandbox Code Playgroud)
但是,您需要知道字体的Postscript名称.只需按照@Daniel Wood的建议,在你使用FontBook时按下命令即可.
然后,享受您的自定义字体.
首先将.odt格式的字体添加到资源中,在这种情况下我们将使用DINEngschriftStd.otf,然后使用此代码将字体分配给标签
[theUILabel setFont:[UIFont fontWithName:@"DINEngschriftStd" size:21]];
Run Code Online (Sandbox Code Playgroud)
要确保在项目中加载字体,请调用
NSLog(@"Available Font Families: %@", [UIFont familyNames]);
Run Code Online (Sandbox Code Playgroud)
在.plist上,您必须声明字体.只需添加"由应用程序提供的字体"记录,并添加一个带有字体名称的项目0字符串(DINEngschriftStd.otf)
| 归档时间: |
|
| 查看次数: |
235897 次 |
| 最近记录: |