แบบอักษรที่กำหนดเองใน iOS 7


102

ฉันกำลังพัฒนาเกมและฉันต้องการใช้แบบอักษรที่กำหนดเองในแอปของฉัน ฉันใช้ SpriteKit ถ้ามันสำคัญ ฉันได้ลองใช้https://github.com/deni2s/IBCustomFontsแต่ฉันไม่สามารถใช้งานกับฟอนต์นี้ได้http://www.fontspace.com/freaky-fonts/emulogic

ฉันได้ลองทำสิ่งต่างๆแล้วและฉันได้ลงทะเบียนฟอนต์ใน info.plist ของแอพ ... มีใครรู้บ้างไหมว่าเกิดอะไรขึ้น?


คุณแน่ใจหรือว่าใช้ชื่อแบบอักษรที่ถูกต้องเมื่อใช้ในโค้ดของคุณ
นิค

1
บล็อกนี้อาจเป็นประโยชน์สำหรับคุณcodewithchris.com/…
Xu Yin

คำตอบ:


277

ก่อนอื่นฉันคิดว่า SpriteKit ไม่ได้สร้างความแตกต่างใด ๆ

  1. คุณต้องคัดลอกแบบอักษรใน. otf หรือ. tf ไปยังโครงการของคุณ ตัวอย่างเช่นในไฟล์ที่รองรับ
  2. คุณจำเป็นต้องแก้ไข.plistไฟล์ เพิ่มคีย์"แบบอักษรที่แอปพลิเคชันให้มา"ลงใน plist ของคุณและในรายการ 0คัดลอกชื่อไฟล์ที่แน่นอนของแบบอักษรที่คุณคัดลอกไปยังไฟล์สนับสนุนที่มีนามสกุล ตัวอย่างเช่น "JosefinSansStd-Light_0.otf"
  3. ตรวจสอบให้แน่ใจว่าแบบอักษรที่คุณนำเข้าสู่แอปของคุณถูกบรรจุลงในแอปเอง ทำได้โดยการเลือกของคุณเป้าหมายแล้วสร้างเฟสแล้วคัดลอกทรัพยากร Bundle หากคุณไม่เห็นตัวอักษรของคุณมีให้ลากจากแฟ้มสนับสนุน

สุดท้ายคุณต้องการแสดงรายการแบบอักษรทั้งหมดของคุณเมื่อแอปเริ่มต้นเพียงเพื่อดูชื่อที่ใช้งานได้สำหรับแบบอักษรของคุณ คุณจะทำสิ่งนั้นด้วยรหัสชิ้นเล็ก ๆ นี้:

NSArray *fontFamilies = [UIFont familyNames];
for (int i = 0; i < [fontFamilies count]; i++)
{
    NSString *fontFamily = [fontFamilies objectAtIndex:i];
    NSArray *fontNames = [UIFont fontNamesForFamilyName:[fontFamilies objectAtIndex:i]];
    NSLog (@"%@: %@", fontFamily, fontNames);
}

ค้นหาแบบอักษรของคุณในผลการพิมพ์ตัวอย่างเช่นฉันจะค้นหา "Josefin" และฉันจะเห็นชื่อแบบอักษรจริงคือ "JosefinSansStd-Light" หลังจากนั้นคุณจะต้องใช้แบบอักษรนั้นโดย:

UIFont *customFont = [UIFont fontWithName:@"JosefinSansStd-Light" size:20];

ใน iOS8 คุณสามารถเพิ่มแบบอักษรของคุณลงในโปรเจ็กต์ได้โดยตรงและสามารถมองเห็นได้ในตัวสร้างอินเทอร์เฟซ แก้ไขรหัสของคุณเพื่ออธิบายสิ่งนี้ แต่ตั้งค่าแบบอักษรทางโปรแกรมสำหรับ iOS7 และเลือกในตัวสร้างอินเทอร์เฟซ xCode6 ปล. ตัวสร้างอินเทอร์เฟซใน xCode6 ให้ชื่อแบบอักษรที่ถูกต้องซึ่งคุณสามารถคัดลอกและวางลงในโค้ดด้านล่าง

#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

 if(SYSTEM_VERSION_LESS_THAN(@"8.0"))
    {
        UIFont *customFont = [UIFont fontWithName:@"OpenSans-Light" size:32];
        self.registerLabel.font = customFont;  
    }

หวังว่านี่จะช่วยได้ไชโย


ขอบคุณ! ฉันเข้าใจแล้ว! ปัญหาคือฉันไม่ได้เพิ่มลงในไฟล์ที่รองรับจึงไม่สามารถโหลดได้: P
JoséMaría

1
ฉันต้องใช้คีย์ plist ของUIAppFonts
Mike Flynn

1
ฉันสร้างแอปของฉันขึ้นใหม่ทั้งโครงการจาก iOS7 / Xcode 5.1.1 เป็นโครงการ iOS8 / Xcode 6.0 แบบอักษรที่กำหนดเองไม่แสดงจนกว่าฉันจะทำ 2 ขั้นตอน คำอธิบาย Gr8!
MB_iOSDeveloper

1
รหัสเดียวกันสำหรับการรับชื่อแบบอักษรใน Swift: let fontFamilies = UIFont.familyNames() for familyName in fontFamilies { let fontNames = UIFont.fontNamesForFamilyName(familyName as String) println("\(familyName): \(fontNames)") }
Alexander Bekert

1
รหัสที่รวดเร็วสำหรับพิมพ์ชื่อแบบอักษรทั้งหมด:for name in UIFont.familyNames() { debugPrint(UIFont.fontNamesForFamilyName(name)) }
gimenete

24

ไม่มีปัญหาในการใช้แบบอักษรที่กำหนดเองฉันทำแล้ว ทำตามขั้นตอนเหล่านี้:

  1. ลงทะเบียนแบบอักษรใน info.plist ของคุณเพิ่มรายการ "แบบอักษรที่จัดเตรียมโดยแอปพลิเคชัน" ใส่ชื่อไฟล์ฟอนต์ไม่ใช่ชื่อฟอนต์ เช่น font.ttf (ฉันคิดว่าคุณทำไปแล้ว)
  2. ไปที่โปรเจ็กต์ของคุณบนตัวนำทางโปรเจ็กต์คลิกที่ชื่อโปรเจ็กต์และไปที่ "สร้างเฟส" จากนั้นมองลงไปที่ "คัดลอกทรัพยากรบันเดิล" ไปที่ด้านล่างมีไฟล์จำนวนมากและค้นหาเครื่องหมาย "+" หน้าต่างป๊อปอัปจะเปิดขึ้นพร้อมไฟล์โครงการของคุณ ค้นหาไฟล์ฟอนต์ของคุณและเพิ่มลงในบันเดิล
  3. สุดท้ายตรวจสอบชื่อแบบอักษร เมื่อคุณใช้ในรหัสของคุณคุณต้องใช้ชื่อแบบอักษรไม่ใช่ชื่อไฟล์ หากต้องการทราบชื่อฟอนต์ให้ดับเบิลคลิกที่ไฟล์ฟอนต์ใน Finder จากนั้นหน้าต่างจะเปิดขึ้นเพื่อแสดงฟอนต์ ตรวจสอบชื่อหน้าต่างนั่นคือชื่อของแบบอักษรที่คุณต้องใช้

และคำแนะนำเพิ่มชื่อนั้นเป็นมาโครในไฟล์ ..Prefix.pch ของคุณ จะง่ายกว่าที่จะใช้ในโปรเจ็กต์ของคุณหากคุณต้องใช้ฟอนต์หลายครั้ง

ปัญหาที่ฉันคิดว่าคุณมีคือคุณลงทะเบียนแบบอักษรอย่างถูกต้อง แต่ไม่ได้คัดลอกไปยัง App Bundle ดังนั้นเมื่อแอปเรียกใช้งานก็ไม่พบแบบอักษร นั่นเป็นเหตุผลว่าทำไมขั้นตอนที่ 2 จึงสำคัญ ฉันใช้เวลานานมากในการพยายามคิดว่าในครั้งแรก :)


2
กุญแจสำคัญสำหรับฉันคือชื่อของแบบอักษร ขอบคุณ!
ออสการ์

20

เพื่อให้บรรลุสิ่งนี้อย่างรวดเร็ว

หากคุณต้องการแสดงรายการแบบอักษรทั้งหมดของคุณเมื่อแอปเริ่มต้นเพียงเพื่อดูชื่อที่ใช้งานได้สำหรับแบบอักษรของคุณ คุณสามารถทำได้ด้วยรหัสชิ้นเล็ก ๆ นี้:

    UIFont.familyNames.forEach {
        print("fontFamily: \($0), fonts: \(UIFont.fontNames(forFamilyName: $0))")
    }

หรือกับUIFont.familyNames.forEach { print("fontFamily: \($0), fonts: \(UIFont.fontNames(forFamilyName: $0))") }
Daniel

5

ฉันไม่เคยได้รับคำตอบเหล่านี้จากการลองทำงานหลายครั้ง วิธีเดียวที่ฉันมีแบบอักษรที่กำหนดเองเพื่อทำตามคำสั่งในคำตอบที่ยอมรับจากนั้นสร้างป้ายกำกับที่ซ่อนอยู่ในกระดานเรื่องราวที่ใช้แบบอักษร ฉันสามารถใช้แบบอักษรทางโปรแกรมได้ ฉันรู้ว่าแปลกและแฮ็ค แต่มันใช้ได้ผลสำหรับฉัน


1
คุณพูดถูก ฉันดูทุกอย่างในแบบฝึกหัดมากมายรวมถึง plist เครื่องหมายถูกสำหรับกำหนดเป้าหมายโครงการสร้างขั้นตอนและในที่สุดก็พบชื่อตระกูลแบบอักษรที่ถูกต้อง แต่ก็ยังใช้งานไม่ได้ จากนั้นฉันก็เพิ่มป้ายกำกับที่ซ่อนไว้ตามที่คุณพูดและในที่สุดก็ปรากฏขึ้น ฉันใช้ Xcode 7.2 และต้องเป็นบั๊ก
DrZ214

3

หากคุณอยู่ใน Xcode 6 มันง่ายอย่างที่คิด เพียงเพิ่มfontโฟลเดอร์ลงในโปรเจ็กต์ของคุณเพิ่มฟอนต์ของคุณลงในโฟลเดอร์เท่านี้คุณก็พร้อมใช้งานแล้ว

ป้อนคำอธิบายภาพที่นี่


7
อย่าลืมเพิ่มไปยังเป้าหมายที่คุณตั้งใจไว้ด้วย Xcode ฮอบบิทส่อเสียด
Matt Parkins

3

หากวิธีการข้างต้นไม่ได้ผลสำหรับคุณและคุณใช้แบบอักษรที่กำหนดเอง "โดยทางโปรแกรม" เท่านั้น (กล่าวคือคุณไม่ได้ใช้ใน xib ใด ๆ ) คุณจะต้องใช้มันอย่างน้อยหนึ่งครั้งในที่ใดที่หนึ่งใน xib หนึ่งที่ใดก็ได้ .

(ป.ล. สจวร์ตคลาร์ก - ตอบคำถามนี้ไปแล้วดังนั้นโปรดอย่าให้เครดิตฉันอย่างไรก็ตามฉันตัดสินใจที่จะเรียบเรียงใหม่และโพสต์เป็นคำตอบแยกต่างหากเพราะฉันพลาดคำตอบของเขามันไม่ชัดเจนสำหรับฉันเมื่อฉันอ่านฉันพบ ออกโซลูชันนี้โดยบังเอิญเมื่อฉันทดสอบฟอนต์ที่กำหนดเองใน xib และฉันเห็นว่ามันทำงานที่อื่นโดยทางโปรแกรม แต่เมื่อฉันลบฟอนต์ออกจาก xib มันก็หยุดทำงานตามโปรแกรม)



0

อาจจะเป็นการแก้ไขอย่างรวดเร็ว - สิ่งนี้ใช้ได้กับฉันเมื่อแบบอักษรใช้งานได้แล้ว แต่ป้ายกำกับใหม่ไม่แสดงแบบอักษรที่ต้องการ:

โฟลเดอร์ข้อมูลที่ได้มาที่สะอาดหมดจดและว่างเปล่า


0
please try below code.
@end
@implementation UILabel (CustomFont)
-(void)setFontName:(NSString *)value{
CGFloat newsize = (self.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320;
[self setFont:[UIFont fontWithName:self.font.fontName size:newsize]];
}
@end
@implementation UITextField (CustomFont)
-(void)setFontName:(NSString *)value{
CGFloat newsize = (self.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320;
[self setFont:[UIFont fontWithName:self.font.fontName size:newsize]];
}
@end
@implementation UIButton (CustomFont)
-(void)setFontName:(NSString *)value{
CGFloat newsize = (self.titleLabel.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320;
[self.titleLabel setFont:[UIFont fontWithName:self.titleLabel.font.fontName size:newsize]];
}
@end
@end

@interface UILabel (CustomFont)
-(void)setFontName:(NSString *)value;
@end
@interface UITextField (CustomFont)
-(void)setFontName:(NSString *)value;
@end
@interface UIButton (CustomFont)
-(void)setFontName:(NSString *)value;
@end
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.