ผมอยากที่จะมีแอปรวมถึงตัวอักษรที่กำหนดเองสำหรับการแสดงผลข้อความโหลดแล้วใช้กับมาตรฐานองค์ประกอบเช่นUIKit
UILabel
เป็นไปได้ไหม
ผมอยากที่จะมีแอปรวมถึงตัวอักษรที่กำหนดเองสำหรับการแสดงผลข้อความโหลดแล้วใช้กับมาตรฐานองค์ประกอบเช่นUIKit
UILabel
เป็นไปได้ไหม
คำตอบ:
iOS 3.2 และใหม่กว่ารองรับสิ่งนี้ ส่งตรงจากเอกสารใหม่ของ iPhone OS 3.2 :
Custom Font Support
Applications ที่ต้องการใช้ฟอนต์ที่กำหนดเองสามารถรวมฟอนต์เหล่านั้นในบันเดิลของแอพพลิเคชั่นและลงทะเบียนฟอนต์เหล่านั้นกับระบบโดยการรวมคีย์ UIAppFonts ในไฟล์ Info.plist ค่าของคีย์นี้คืออาร์เรย์ของสตริงที่ระบุไฟล์ฟอนต์ในชุดของแอปพลิเคชัน เมื่อระบบเห็นคีย์มันจะโหลดแบบอักษรที่ระบุและทำให้ใช้ได้กับแอปพลิเคชัน
เมื่อตั้งค่าฟอนต์Info.plist
แล้วคุณสามารถใช้ฟอนต์ที่คุณกำหนดเองเป็นฟอนต์อื่น ๆ ใน IB หรือโดยทางโปรแกรม
มีเธรดอย่างต่อเนื่องในฟอรัมนักพัฒนา Apple:
https://devforums.apple.com/thread/37824 (ต้องเข้าสู่ระบบ)
และนี่คือการสอน 3 ขั้นตอนที่ยอดเยี่ยมและเรียบง่ายเกี่ยวกับการบรรลุเป้าหมายนี้ (ลบลิงก์ที่ขาดออก)
Info.plist
UIAppFonts
UIAppFonts
อาร์เรย์Info.plist
[UIFont fontWithName:@"CustomFontName" size:12]
ที่จะได้รับตัวอักษรที่กำหนดเองเพื่อใช้งานร่วมกับคุณUILabelsและUITextViewsฯลฯ ...นอกจากนี้: ตรวจสอบให้แน่ใจว่าแบบอักษรอยู่ในทรัพยากรชุดสำเนาของคุณ
แก้ไข: ตั้งแต่ iOS 3.2 ฟังก์ชั่นนี้สร้างขึ้นมาหากคุณต้องการรองรับ pre-3.2 คุณยังคงสามารถใช้โซลูชันนี้ได้
ฉันสร้างโมดูลง่าย ๆ ที่ขยายUILabel
และจัดการโหลดไฟล์. ttf ฉันปล่อยโอเพนซอร์สภายใต้ใบอนุญาต Apache และวางไว้บน github ที่นี่
ไฟล์ที่สำคัญและFontLabel.h
FontLabel.m
มันใช้บางส่วนของรหัสจากคำตอบของ Genericrich
ค้นหาแหล่งที่มาที่นี่
หรือ
คัดลอกไฟล์ฟอนต์ของคุณลงในแหล่งข้อมูล
เพิ่มรหัสลงในInfo.plist
ไฟล์ของคุณชื่อ UIAppFonts ("แบบอักษรให้บริการโดยแอปพลิเคชัน)
กำหนดให้คีย์นี้เป็นอาร์เรย์
สำหรับแต่ละฟอนต์ที่คุณมีให้ป้อนชื่อเต็มของไฟล์ฟอนต์ (รวมถึงส่วนขยาย) เป็นไอเท็มไปยังอาร์เรย์ UIAppFonts
บันทึก Info.plist
ในแอปพลิเคชันของคุณคุณสามารถโทรหา[UIFont fontWithName:@"CustomFontName" size:15]
แบบอักษรที่กำหนดเองเพื่อใช้กับของคุณUILabels
และUITextViews
อื่น ๆ ...
มีวิธีที่ง่ายต่อการใช้แบบอักษรที่กำหนดเองในเป็นiOS 4
Chalkduster.ttf
) ไปยังโฟลเดอร์Resourcesของโครงการใน XCodeinfo.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
ใน Info.plist ให้เพิ่มรายการ "แบบอักษรที่จัดทำโดยแอปพลิเคชัน" และรวมชื่อแบบอักษรเป็นสตริง:
Fonts provided by application
Item 0 myfontname.ttf
Item 1 myfontname-bold.ttf
...
จากนั้นตรวจสอบเพื่อให้แน่ใจว่าแบบอักษรของคุณรวมอยู่ในการเรียกใช้:
for (NSString *familyName in [UIFont familyNames]) {
for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
NSLog(@"%@", fontName);
}
}
โปรดทราบว่าชื่อไฟล์ ttf ของคุณอาจไม่ใช่ชื่อเดียวกับที่คุณใช้เมื่อคุณตั้งค่าแบบอักษรสำหรับป้ายกำกับของคุณ (คุณสามารถใช้รหัสด้านบนเพื่อรับพารามิเตอร์ "fontWithName"):
[label setFont:[UIFont fontWithName:@"MyFontName-Regular" size:18]];
แก้ไข: คำตอบนี้หมดอายุเมื่อ iOS3.2; ใช้ UIAppFonts
วิธีเดียวที่ฉันสามารถโหลดUIFont
s กำหนดเองได้สำเร็จคือผ่านเฟรมเวิร์ก 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;
}
เมื่อโหลดฟอนต์แล้วจะสามารถใช้ฟอนต์ได้เหมือนกับฟอนต์ที่ Apple จัดหาให้:
NSLog(@"Available Font Families: %@", [UIFont familyNames]);
[label setFont:[UIFont fontWithName:@"Consolas" size:20.0f]];
GraphicsServices สามารถโหลดได้ที่ runtime ในกรณีที่ 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;
}
[NSString sizeWithFont:[UIFont fontWithName:@"customFont" size:14]];
ส่งคืนความกว้างและความสูง 0 สำหรับแบบอักษรที่กำหนดเองใด ๆ ที่ฉันได้ลอง
ด้วยiOS 8
+ และXcode 6
+ คุณสามารถทำสิ่งนี้ได้อย่างง่ายดาย นี่คือขั้นตอน:
1) ลากแล้วปล่อยแบบอักษรของคุณไปยังXcode
โฟลเดอร์สนับสนุนไฟล์ อย่าลืมที่จะทำเครื่องหมายของแอปที่เพิ่มเป้าหมายส่วน จากช่วงเวลานี้คุณสามารถใช้แบบอักษรนี้IB
และเลือกจากแบบอักษรพาเลท
2) ในการทำให้แบบอักษรนี้พร้อมใช้งานในอุปกรณ์ของคุณให้เปิดinfo.plist
และเพิ่มFonts provided by application
รหัส มันจะมีคีย์รายการ 0 คุณต้องเพิ่มชื่อตัวอักษรของคุณเป็นค่า ชื่อแบบอักษรอาจแตกต่างจากชื่อไฟล์แบบอักษรของคุณ แต่ก่อนอื่นลองเพิ่มชื่อไฟล์ของคุณในกรณีส่วนใหญ่งานนี้
ถ้าไม่บทความนี้ช่วยฉันเสมอ
นี่คือตัวอย่างรหัสจากบทความนี้ที่จะช่วยคุณค้นหาชื่อตัวอักษรของคุณ
func allFonts(){
for family in UIFont.familyNames(){
println(family)
for name in UIFont.fontNamesForFamilyName(family.description)
{
println(" \(name)")
}
}
}
ฉันต้องการที่จะพูดถึงว่าคุณต้องเพิ่มไฟล์ตัวอักษรที่คุณเฟสรูปร่างของเป้าหมาย , คัดลอกทรัพยากร Bundle หากไม่มีคุณจะไม่เห็นแบบอักษรของคุณบนอุปกรณ์ และอาจนำไปสู่พฤติกรรมที่ไม่คาดคิด
ตัวอย่างเช่นผมพบbug
เมื่อUITextField
มีอักษรที่กำหนดเอง แต่ตัวอักษรนี้ไม่ได้อยู่ในการคัดลอกทรัพยากร Bundle และเมื่อฉันทำตามviewcontroller
ด้วยสิ่งนี้textfield
จะมีความล่าช้าประมาณ 4 วินาทีก่อนviewDidLoad
หน้าที่จะเรียกใช้ การแก้ไขปัญหาแบบอักษรลบความล่าช้านี้ ดังนั้นแนะนำให้ตรวจสอบสองครั้ง (rdar: // 20028250) Btw ฉันไม่สามารถทำซ้ำข้อบกพร่องได้ แต่ฉันแน่ใจว่าปัญหาเกิดจากตัวอักษร
ฉันทำสิ่งนี้แล้ว:
โหลดแบบอักษร:
- (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);
}
ในตอนนี้คุณ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]);
}
โดยพื้นฐานแล้วคุณต้องใช้กำลังดุร้ายกำลังวนลูปผ่านข้อความและการฟาดฟันด้วยหมายเลขเวทย์มนตร์เพื่อค้นหาออฟเซ็ตของคุณ (ที่นี่เห็นฉันใช้ 29) ในแบบอักษร แต่ใช้งานได้
นอกจากนี้คุณต้องตรวจสอบให้แน่ใจว่าแบบอักษรนั้นสามารถฝังได้อย่างถูกกฎหมาย ส่วนใหญ่ไม่ได้และมีนักกฎหมายที่เชี่ยวชาญในเรื่องนี้ดังนั้นจึงควรระมัดระวัง
CGContextShowTextAtPoint()
- แม้ว่าจะไม่ทำงานกับ UTF-8
ใช่คุณสามารถรวมแบบอักษรที่กำหนดเองได้ อ้างถึงเอกสารเกี่ยวกับ UIFont โดยเฉพาะfontWithName:size:
วิธีการ
1) ตรวจสอบให้แน่ใจว่าคุณใส่แบบอักษรในโฟลเดอร์ทรัพยากรของคุณ
2) "ชื่อ" ของตัวอักษรไม่จำเป็นต้องเป็นชื่อไฟล์
3) ตรวจสอบให้แน่ใจว่าคุณมีสิทธิ์ตามกฎหมายที่จะใช้แบบอักษรนั้น เมื่อรวมไว้ในแอปของคุณคุณจะต้องทำการกระจายและคุณต้องมีสิทธิ์ในการทำเช่นนั้น
หากคุณกำลังใช้xcode 4.3
คุณต้องเพิ่มfont
ไปBuild Phase
ภายใต้Copy Bundle Resources
ตามhttps://stackoverflow.com/users/1292829/arneในหัวข้อที่กำหนดเองแบบอักษร Xcode 4.3 สิ่งนี้ใช้ได้ผลสำหรับฉันนี่คือขั้นตอนที่ฉันใช้เพื่อให้แบบอักษรที่กำหนดเองทำงานในแอป
OTF
(หรือTTF
) ไฟล์ไปยังกลุ่มใหม่ที่ฉันสร้างขึ้นและทางเลือกที่ได้รับการยอมรับ Xcode copying the files over to the project folder
ของUIAppFonts
อาร์เรย์ด้วยแบบอักษรของคุณที่ระบุไว้เป็นรายการภายในอาร์เรย์ เพียงแค่names
ไม่ใช่ส่วนขยาย (เช่น " GothamBold
", " GothamBold-Italic
")project name
วิธีที่ด้านบนของProject Navigator
ด้านซ้ายของหน้าจอBuild Phases
แท็บที่ปรากฏในพื้นที่หลักของ xcodeCopy Bundle Resources
" และคลิก"+"
เพื่อเพิ่มแบบอักษร"+"
เลือกไฟล์ตัวอักษรจากนำทางแฟ้มที่ปรากฏเปิดเมื่อคุณคลิกที่add to the project
ทำเช่นนี้สำหรับตัวอักษรที่คุณต้องทุกนี่คือคำแนะนำทีละขั้นตอนวิธีการทำ ไม่จำเป็นต้องใช้ไลบรารีเพิ่มเติมหรือการเข้ารหัสพิเศษใด ๆ
http://shang-liang.com/blog/custom-fonts-in-ios4/
ส่วนใหญ่ปัญหาเกิดจากตัวอักษรไม่ใช่วิธีการ วิธีที่ดีที่สุดที่จะทำคือใช้แบบอักษรที่ใช้งานได้จริงเช่น verdana หรือ geogia จากนั้นเปลี่ยนเป็นแบบอักษรที่ต้องการ หากไม่ได้ผลอาจเป็นชื่อตัวอักษรที่ไม่ถูกต้องหรือตัวอักษรนั้นไม่ใช่แบบอักษรที่มีการจัดรูปแบบที่ดี
มันง่ายมากที่จะเพิ่มแบบอักษรใหม่ในแอพ iOS ที่คุณมีอยู่
คุณเพียงแค่ต้องเพิ่มแบบอักษรเช่น font.ttf ลงในโฟลเดอร์ทรัพยากรของคุณ
info.plist
เปิดใบสมัครของคุณ เพิ่มแถวใหม่เป็น "แบบอักษรที่จัดทำโดยแอปพลิเคชัน" และพิมพ์ชื่อแบบอักษรเป็น font.ttf
และเมื่อตั้งค่าฟอนต์ให้เป็นเช่นนั้น setFont:"corresponding Font Name"
NSArray *check = [UIFont familyNames];
คุณสามารถตรวจสอบว่าตัวอักษรของคุณจะเพิ่มขึ้นหรือไม่โดย
มันส่งคืนฟอนต์ทั้งหมดที่แอปพลิเคชันของคุณสนับสนุน
ฉันอยากจะแนะนำหนึ่งในบทเรียนสั้น ๆ ที่ฉันชอบที่นี่: http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/ซึ่งข้อมูลนี้มา
ขั้นตอนที่ 1 - ลาก. ttf หรือ. otf จาก Finder ไปยังโครงการของคุณ
หมายเหตุ - ตรวจสอบให้แน่ใจว่าได้คลิกที่กล่องเพื่อ 'เพิ่มไปยังเป้าหมาย' ในเป้าหมายแอปพลิเคชันหลักของคุณ
หากคุณลืมคลิกเพื่อเพิ่มลงในเป้าหมายของคุณจากนั้นคลิกที่ไฟล์ฟอนต์ในลำดับชั้นโครงการของคุณและบนแผงด้านขวาคลิกเป้าหมายหลักของแอพในส่วนสมาชิกเป้าหมาย
เพื่อให้แน่ใจว่าแบบอักษรของคุณเป็นส่วนหนึ่งของเป้าหมายแอปของคุณตรวจสอบให้แน่ใจว่าแบบอักษรเหล่านั้นแสดงในCopy Bundle ResourcesของคุณในBuild Phases
ขั้นตอนที่ 2 - เพิ่มชื่อไฟล์ตัวอักษรลงใน Plist ของคุณ
ไปที่คุณสมบัติเป้าหมาย iOS แบบกำหนดเองในส่วนข้อมูลของคุณและเพิ่มคีย์ให้กับรายการในส่วนที่เรียกว่าFonts provided by application
(คุณควรเห็นว่ามันเป็นตัวเลือกในขณะที่คุณพิมพ์มันและมันจะตั้งค่าตัวเองเป็นอาร์เรย์คลิกลูกศรเล็ก ๆ เพื่อเปิดรายการอาเรย์และพิมพ์ชื่อของไฟล์. ttf หรือ. otf ที่คุณเพิ่มเพื่อให้แอปของคุณรู้ว่าสิ่งเหล่านี้เป็นไฟล์ฟอนต์ที่คุณต้องการ
หมายเหตุ - หากแอปของคุณล่มหลังจากขั้นตอนนี้ให้ตรวจสอบตัวสะกดในรายการที่คุณเพิ่มที่นี่
ขั้นตอนที่ 3 - ค้นหาชื่อของแบบอักษรของคุณเพื่อให้คุณสามารถเรียกพวกเขา
บ่อยครั้งที่ชื่อแบบอักษรที่แอปพลิเคชันของคุณเห็นนั้นแตกต่างจากสิ่งที่คุณคิดว่ามันเป็นไปตามชื่อไฟล์ของแบบอักษรนั้นใส่รหัสของคุณและดูบันทึกการใช้งานของคุณที่ทำให้ชื่อตัวอักษรโทรในรหัสของคุณ
รวดเร็ว
for family: String in UIFont.familyNames(){
print("\(family)")
for names: String in UIFont.fontNamesForFamilyName(family){
print("== \(names)")
}
}
วัตถุประสงค์ C
for (NSString* family in [UIFont familyNames]){
NSLog(@"%@", family);
for (NSString* name in [UIFont fontNamesForFamilyName: family]){
NSLog(@" %@", name);
}
}
บันทึกของคุณควรมีลักษณะดังนี้:
ขั้นตอนที่ 4 - ใช้แบบอักษรที่กำหนดเองใหม่ของคุณโดยใช้ชื่อจากขั้นตอนที่ 3
รวดเร็ว
label.font = UIFont(name: "SourceSansPro-Regular", size: 18)
วัตถุประสงค์ C
label.font = [UIFont fontWithName:@"SourceSansPro-Regular" size:18];
ค้นหา TTF ในตัวค้นหาและ "รับข้อมูล" ภายใต้หัวข้อ "ชื่อเต็ม:" มันให้ชื่อฉันซึ่งฉันใช้กับfontWithName
(ฉันเพิ่งคัดลอกและวางชื่อที่แน่นอนในกรณีนี้ไม่จำเป็นต้องใช้ส่วนขยาย '.ttf')
ยังไม่ออกมา แต่รุ่นต่อไปของ cocos2d (เฟรมเวิร์กเกม 2d) จะรองรับฟอนต์บิตแมปความยาวผันแปรเป็นแผนที่อักขระ
http://code.google.com/p/cocos2d-iphone/issues/detail?id=317
ผู้เขียนไม่มีวันวางจำหน่ายที่ถูกตอกตะปูสำหรับรุ่นนี้ แต่ฉันเห็นการโพสต์ที่ระบุว่าจะเป็นในอีกหนึ่งหรือสองเดือนถัดไป
ประกาศสำคัญ: คุณควรใช้ "ชื่อ PostScript" ที่เชื่อมโยงกับแบบอักษรไม่ใช่ชื่อเต็มหรือชื่อครอบครัว ชื่อนี้มักจะแตกต่างจากชื่อปกติของตัวอักษร
ทำตามขั้นตอนนี้
1) คัดลอกแบบอักษรของคุณในโครงการของคุณ
2) เปิด.plist
ไฟล์ของคุณในโหมดซอร์สโค้ด ... (หมายเหตุ - อย่าเปิดinfo.plist
)
3) ก่อนหน้านั้น - คลิกขวาที่ตัวอักษรของคุณและเปิดใน fontforge หรือตัวแก้ไขที่คล้ายกันและ install
ในระบบของคุณมันควรจะเป็นinstall
4) พิมพ์สิ่งนี้
<key>UIAppFonts</key>
<array>
<string>MyriadPro.otf</string>
</array>
5) พิมพ์รหัสนี้ใน class .m
[lblPoints setFont:[UIFont fontWithName:@"Myriad Pro" size:15.0]];
ที่นี่ lblPoints จะเปลี่ยนเป็นของคุณ UILabel
เสร็จสิ้น !! ถ้าตัวอักษรของคุณยังใช้งานไม่ได้ให้ตรวจสอบความเข้ากันได้แบบอักษรของคุณก่อน
info.plist
?
บางทีผู้เขียนอาจลืมตั้งชื่อแบบอักษรMac FOND ?
คุณสามารถลองตัวเลือก "Apple" ในกล่องโต้ตอบการส่งออกได้
การปฏิเสธความรับผิด : ฉันไม่ได้เป็นนักพัฒนา IPhone!
ฉันได้ลองทำตามคำแนะนำต่าง ๆ ในหน้านี้บน iOS 3.1.2 แล้วและนี่คือข้อสรุปของฉัน:
เพียงใช้[UIFont fontWithName:size:]
กับแบบอักษรในไดเรกทอรีทรัพยากรจะไม่ทำงานแม้ว่าชื่อ FOND จะถูกตั้งค่าโดยใช้ FontForge
[UIFont fontWithName:size:]
จะทำงานหากโหลดแบบอักษรก่อนโดยใช้ GSFontAddFromFile แต่GSFontAddFromFile
ไม่ใช่ส่วนหนึ่งของ iOS 3.1.2 ดังนั้นจึงต้องโหลดแบบไดนามิกตามที่อธิบายโดย @rpetrich
เงยหน้าขึ้นมอง ATSApplicationFontsPath
รายการ plist แบบง่ายที่ช่วยให้คุณรวมไฟล์ฟอนต์ในโฟลเดอร์ทรัพยากรแอพของคุณและพวกเขา "เพิ่งทำงาน" ในแอปของคุณ
ฉันได้รวมคำแนะนำบางอย่างในหน้านี้เป็นสิ่งที่เหมาะกับฉันใน iOS 5
ก่อนอื่นคุณต้องเพิ่มแบบอักษรที่กำหนดเองในโครงการของคุณ จากนั้นคุณต้องทำตามคำแนะนำของ @iPhoneDev และเพิ่มแบบอักษรลงในไฟล์ info.plist ของคุณ
หลังจากคุณทำเช่นนี้แล้วงานนี้:
UIFont *yourCustomFont = [UIFont fontWithName:@"YOUR-CUSTOM-FONT-POSTSCRIPT-NAME" size:14.0];
[yourUILabel setFont:yourCustomFont];
อย่างไรก็ตามคุณต้องรู้ชื่อ Postscript ของตัวอักษรของคุณ เพียงทำตามคำแนะนำของ @Daniel Wood และกด command-i ขณะที่คุณอยู่ใน FontBook
จากนั้นเพลิดเพลินกับแบบอักษรที่กำหนดเองของคุณ
ขั้นแรกให้เพิ่มแบบอักษรในรูปแบบ. odt ให้กับทรัพยากรของคุณในกรณีนี้เราจะใช้ DINEngschriftStd.otf จากนั้นใช้รหัสนี้เพื่อกำหนดแบบอักษรให้กับป้ายกำกับ
[theUILabel setFont:[UIFont fontWithName:@"DINEngschriftStd" size:21]];
เพื่อให้แน่ใจว่าตัวอักษรของคุณถูกโหลดในโครงการเพียงแค่โทร
NSLog(@"Available Font Families: %@", [UIFont familyNames]);
ใน .plist คุณต้องประกาศแบบอักษร เพียงเพิ่มระเบียน 'แบบอักษรที่จัดทำโดยแอปพลิเคชัน' และเพิ่มรายการ 0 สตริงด้วยชื่อของแบบอักษร (DINEngschriftStd.otf)
สำหรับ iOS 3.2 และสูงกว่า: ใช้วิธีการต่าง ๆ ที่กล่าวมาข้างต้นคือ:
[UIFont fontWithName:@"Real Font Name" size:16]
ในแอปพลิเคชันของคุณแต่ "ชื่อตัวอักษรที่แท้จริง" ไม่ใช่ชื่อที่คุณเห็นใน Fontbook เสมอไป วิธีที่ดีที่สุดคือถามอุปกรณ์ของคุณว่าเห็นแบบอักษรและชื่อที่แน่นอน
ฉันใช้ uifont-name-grabber โพสต์ที่: uifont-name-grabber
เพียงแค่วางแบบอักษรที่คุณต้องการในโครงการ xcode เพิ่มชื่อไฟล์ลงในเพลทของมันแล้วรันบนอุปกรณ์ที่คุณกำลังสร้างมันจะส่งอีเมลรายการแบบอักษรทั้งหมดให้คุณโดยใช้ชื่อที่UIFont fontWithName:
ต้องการ
ทางออกที่ดีกว่าคือการเพิ่มคุณสมบัติใหม่ " Fonts provided by application
" ลงในinfo.plist
ไฟล์ของคุณ
UIFont
จากนั้นคุณสามารถใช้ตัวอักษรที่กำหนดเองของคุณเหมือนปกติ
มีวิธีใหม่ในการใช้แบบอักษรที่กำหนดเองเริ่มต้นด้วย iOS 4.1 มันช่วยให้คุณโหลดแบบอักษรแบบไดนามิกไม่ว่าจะเป็นจากไฟล์ที่รวมอยู่ในแอพข้อมูลที่ดาวน์โหลดหรือสิ่งที่มีให้คุณ นอกจากนี้ยังช่วยให้คุณโหลดแบบอักษรตามที่คุณต้องการในขณะที่วิธีเก่าโหลดแบบอักษรทั้งหมดเมื่อเริ่มต้นแอพซึ่งอาจใช้เวลานานเกินไปหากคุณมีแบบอักษรจำนวนมาก
วิธีการใหม่มีการอธิบายที่ios-dynamic-font-loading
คุณใช้CTFontManagerRegisterGraphicsFont
ฟังก์ชั่นโดยให้บัฟเฟอร์กับข้อมูลฟอนต์ของคุณ จากนั้นจะมีให้UIFont
และมุมมองเว็บเช่นเดียวกับวิธีการเดิม นี่คือตัวอย่างรหัสจากลิงก์นั้น:
NSData *inData = /* your font-file data */;
CFErrorRef error;
CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)inData);
CGFontRef font = CGFontCreateWithDataProvider(provider);
if (! CTFontManagerRegisterGraphicsFont(font, &error)) {
CFStringRef errorDescription = CFErrorCopyDescription(error)
NSLog(@"Failed to load font: %@", errorDescription);
CFRelease(errorDescription);
}
CFRelease(font);
CFRelease(provider);
kCTFontManagerErrorAlreadyRegistered
"ไฟล์ได้รับการลงทะเบียนแล้วในขอบเขตที่ระบุ" developer.apple.com/library/ios/#documentation/Carbon/Reference/…
เพิ่มแบบอักษรที่ต้องการให้กับโครงการของคุณ (เช่นการเพิ่มภาพเพียงแค่ลากไป Xcode) ตรวจสอบให้แน่ใจว่าพวกเขาถูกกำหนดเป้าหมายให้กับโครงการของคุณ
เพิ่มวิธีนี้และโหลดแบบอักษรที่กำหนดเอง (แนะนำในappDelegate didFinishLaunchingWithOptions
)
func loadFont(filePath: String) {
let fontData = NSData(contentsOfFile: filePath)!
let dataProvider = CGDataProviderCreateWithCFData(fontData)
let cgFont = CGFontCreateWithDataProvider(dataProvider)!
var error: Unmanaged<CFError>?
if !CTFontManagerRegisterGraphicsFont(cgFont, &error) {
let errorDescription: CFStringRef = CFErrorCopyDescription(error!.takeUnretainedValue())
print("Unable to load font: %@", errorDescription, terminator: "")
}
}
ใช้ตัวอย่าง:
if let fontPath = NSBundle.mainBundle().pathForResource("My-Font", ofType: "ttf"){
loadFont(fontPath)
}
ใช้แบบอักษร:
UIFont(name: "My-Font", size: 16.5)
คุณสามารถเพิ่มไฟล์ "FONT" ที่ต้องการภายในโฟลเดอร์ทรัพยากร จากนั้นไปที่Info.plist
ไฟล์โครงการและใช้คีย์ "แบบอักษรที่จัดทำโดยแอปพลิเคชัน" และค่าเป็น "FONT NAME"
จากนั้นคุณสามารถเรียกวิธีการ [UIFont fontwithName:@"FONT NAME" size:12];
ฉันทำให้ทุกอย่างเป็นไปได้ แต่แบบอักษรใหม่ไม่ปรากฏดังนั้นฉันจึงพบวิธีแก้ปัญหา:
เมื่อคุณลากไฟล์ fot (otf หรือ ttf) อย่าลืมตรวจสอบช่องทำเครื่องหมายภายใต้ "เพิ่มไปยังเป้าหมาย"
หลังจากนั้นแบบอักษรของคุณจะปรากฏขึ้นและทุกอย่างจะทำงานได้ดี
แม้ว่าคำตอบข้างต้นบางส่วนนั้นถูกต้อง แต่ฉันได้เขียนแบบฝึกหัดที่มีภาพอย่างละเอียดสำหรับผู้ที่ยังมีปัญหาเกี่ยวกับแบบอักษร
การแก้ปัญหาด้านบนที่บอกให้คุณเพิ่มแบบอักษรเพื่อ plist และใช้
[self.labelOutlet setFont:[UIFont fontWithName:@"Sathu" size:10]];
เป็นสิ่งที่ถูกต้อง กรุณาใช้วิธีแฮ็คอื่น ๆ หากคุณยังคงประสบปัญหาในการค้นหาชื่อแบบอักษรและเพิ่มพวกเขานี่คือการสอน -
ใช่คุณสามารถใช้แบบอักษรที่กำหนดเองในใบสมัครของคุณ
ทีละขั้นตอนดังต่อไปนี้:
เพิ่มไฟล์แบบอักษรที่กำหนดเองลงในโครงการของคุณในไฟล์ที่รองรับ
เพิ่มรหัสลงในไฟล์ Info.plist ของคุณชื่อ UIAppFonts
กำหนดให้คีย์นี้เป็นอาร์เรย์
สำหรับแต่ละฟอนต์ที่คุณมีให้ป้อนชื่อเต็มของไฟล์ฟอนต์ (รวมถึงส่วนขยาย) เป็นไอเท็มไปยังอาร์เรย์ UIAppFonts
บันทึก Info.plist ตอนนี้ในแอปพลิเคชันของคุณคุณสามารถโทรหา [UIFont fontWithName: @ "ชื่อแบบอักษรที่กำหนดเองของคุณ" ขนาด: 20] เพื่อรับแบบอักษรที่กำหนดเองเพื่อใช้กับ UILabels ของคุณหลังจากที่ใช้แบบอักษรนี้ บนฟอนต์ที่กำหนดเองและดูชื่อฟอนต์ด้านบนสุดอย่างระมัดระวังกำลังรับและคัดลอกฟอนต์นี้วางที่นี่ [UIFont fontWithName: @ "ที่นี่ผ่านชื่อฟอนต์ที่กำหนดเอง" ขนาด: 20]
ฉันหวังว่าคุณจะได้รับคำตอบที่ถูกต้อง
ใช่คุณสามารถใช้แบบอักษรที่กำหนดเองในใบสมัครของคุณ
ทีละขั้นตอนดังต่อไปนี้:
Info.plist
ไฟล์ชื่อ UIAppFontsInfo.plist
ตอนนี้ในแอปพลิเคชันของคุณคุณสามารถโทรหา[UIFont fontWithName:@"your Custom font Name" size:20]
แบบอักษรที่กำหนดเองเพื่อใช้กับคุณUILabels
หลังจากใช้สิ่งนี้หากไม่ได้รับแบบอักษรที่ถูกต้องจากนั้นให้คุณคลิกสองครั้งที่แบบอักษรที่กำหนดเองและดูชื่อแบบอักษรด้านบนอย่างระมัดระวังและคัดลอกแบบอักษรวางที่นี่[UIFont fontWithName:@" here past your Custom font Name" size:20]
ฉันหวังว่าคุณจะได้คำตอบที่ถูกต้อง