cocos creater ios端 字库不生效
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                cocos creater ios端 字库不生效
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                問題描述:字庫 在ios端 不生效 oc 報錯信息 = NULL
需求: ios端除了cocos相關的操作 還需要原生頁面的支持 ,但是修改完項目 字庫在ios端 不生效
解決方案:
修改jsb_platform_apple.mm文件
static bool JSB_loadFont(se::State& s) {const auto& args = s.args();size_t argc = args.size();CC_UNUSED bool ok = true;if (argc >= 1) {s.rval().setNull();std::string originalFamilyName;ok &= seval_to_std_string(args[0], &originalFamilyName);SE_PRECONDITION2(ok, false, "JSB_loadFont : Error processing argument: originalFamilyName");std::string source;ok &= seval_to_std_string(args[1], &source);SE_PRECONDITION2(ok, false, "JSB_loadFont : Error processing argument: source");std::string fontFilePath;std::regex re("url\\(\\s*'\\s*(.*?)\\s*'\\s*\\)");std::match_results<std::string::const_iterator> results;if (std::regex_search(source.cbegin(), source.cend(), results, re)){fontFilePath = results[1].str();}fontFilePath = FileUtils::getInstance()->fullPathForFilename(fontFilePath);if (fontFilePath.empty()){SE_LOGE("Font (%s) doesn't exist!", fontFilePath.c_str());return true;}NSURL* url = [NSURL fileURLWithPath: [NSString stringWithUTF8String:fontFilePath.c_str()]];NSData* dynamicFontData = [NSData dataWithContentsOfURL:url];if (!dynamicFontData){SE_LOGE("load font (%s) failed!", source.c_str());return true;}const auto& familyNamesBeforeRegister = getAvailableFontFamilyNames();bool succeed = true;CFErrorRef error;CGDataProviderRef providerRef = CGDataProviderCreateWithCFData((CFDataRef)dynamicFontData);CGFontRef font = CGFontCreateWithDataProvider(providerRef);if (!CTFontManagerRegisterGraphicsFont(font, &error)){CFStringRef errorDescription = CFErrorCopyDescription(error);// 捕獲報錯信息代碼修改.新代碼可以捕獲到報錯信息.舊代碼捕獲不到CFIndex length = CFStringGetLength(errorDescription);CFIndex maxSize =CFStringGetMaximumSizeForEncoding(length, kCFStringEncodingUTF8) + 1;char *buffer = (char *)malloc(maxSize);if (CFStringGetCString(errorDescription, buffer, maxSize,kCFStringEncodingUTF8)) {SE_LOGE("Failed to load font: %s", buffer);}// 原始代碼注釋. 捕獲不到報錯信息 // const char* cErrorStr = CFStringGetCStringPtr(errorDescription, kCFStringEncodingUTF8); // SE_LOGE("Failed to load font: %s", cErrorStr);CFRelease(errorDescription);// 由于報錯信息是105 重復注冊 .表示 現在已經有字庫 強制 successsucceed = true;}succeed = true;if (succeed){const auto& familyNamesAfterRegister = getAvailableFontFamilyNames();std::string familyName = getFontFamilyByCompareAvailableFontFamilyNames(familyNamesBeforeRegister, familyNamesAfterRegister);// 強制引用項目中的字庫 名字如下 然后 就能走 字庫的正常邏輯familyName = "FZCuYuan-M03S";if (!familyName.empty()){_fontFamilyNameMap.emplace(originalFamilyName, familyName);s.rval().setString(familyName);}}CFRelease(font);CFRelease(providerRef);return true;}SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1);return false; }總結
以上是生活随笔為你收集整理的cocos creater ios端 字库不生效的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: stm32中库函数和hal库的区别
- 下一篇: 重视网络安全,红客联盟最新开源分享“黑客
