2014-12-12 5 views
0

Есть ли способ построить CGFontRef в контексте Swift Playground? Когда следующий код запускается на детской площадке, «шрифт» равен нулю:Загрузка и регистрация CGFonts на игровой площадке

let path = NSBundle.mainBundle().pathForResource("FiraSans-Medium", ofType: "otf") 
let provider: CGDataProviderRef = CGDataProviderCreateWithFilename(path) 
let font = CGFontCreateWithDataProvider(provider) 
let error: UnsafeMutablePointer<Unmanaged<CFError>?> = nil 
if (!CTFontManagerRegisterGraphicsFont(font, error)) { ... 

Аналогичный код отлично работает в контексте запущенного приложения, так что я подозреваю, что некоторые решающий бит CG инициализации не произошло.

+0

Проблема, вероятно, путь –

+0

ОПФ ресурс присутствует при пути ресурсов на детской площадке в – jbouwman

+0

Зачем вам это нужно для работы с детской площадкой? –

ответ

2

Попробуйте разместить свой шрифт в каталоге документов

let directory = NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false, error: nil)! 

Это будет вернуть каталог детских площадок документов, как это:

file:///var/folders/f9/yrxcqv_10m57prx9lwts4qy80000gq/T/com.apple.dt.Xcode.pg/containers/com.apple.dt.playground.stub.iOS_Simulator.Relative-Time-Formating-B3CC63A2-BAE4-4C6B-A482-1A0F14C27D9D/Documents/ 

Исключить первые 7 символов, откройте Finder и выберите на Перейдите в меню «Перейти к папке» или нажмите на клавиатуре команд-смену-G

/var/folders/f9/yrxcqv_10m57prx9lwts4qy80000gq/T/com.apple.dt.Xcode.pg/containers/com.apple.dt.playground.stub.iOS_Simulator.Relative-Time-Formating-B3CC63A2-BAE4-4C6B-A482-1A0F14C27D9D/Documents/ 

Вставьте туда путь к игровой площадке, и вы будете перенаправлены в папку, где вы должны поместить свой шрифт.

внутри Playground вы можете найти свой шрифт, используя этот подход:

let documentsUrl = NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false, error: nil)! 
let documentsPath = documentsUrl.path! 
let filePath = documentsPath.stringByAppendingPathComponent("FiraSans-Medium.otf") 
let foundIt = NSFileManager().fileExistsAtPath(filePath) // true 
+1

Делает это, и регистрация шрифта завершается успешно. Впоследствии он доступен через UIFont. – jbouwman

+0

@jbouwman Как вы смогли преобразовать 'CGFont' в' UIFont'? Я попробовал примеры [здесь] (http://stackoverflow.com/questions/9205709/how-to-convert-cgfontref-to-uifont) без везения. Имя шрифта, которое он генерирует, не может инициализировать 'UIFont'. – AdamPro13

0

NSBundle.mainBundle() где вы собираетесь не так. Это происходит, чтобы дать вам:

let path = NSBundle.mainBundle().bundlePath 
// /var/folders/fp/j66srs090pvfywgv7xzvflmm0000gn/T/com.apple.dt.Xcode.pg/applications/Foo.app 

Что представляет собой комплект, который не содержит otf файлы, которые вы ищете. Вам нужно будет найти файл otf, используя что-то, кроме NSBundle. Может быть, просто жёстко его:

let path = "/Users/jbouwman/projects/foo/FiraSans-Medium.otf" 
+0

Жесткие пути за пределами пути к ресурсам приводят к ошибкам (защита изолированной изолированной среды?), Внутри пути ресурсов, в нулях и внутри DocumentDirectory, успех. – jbouwman

Смежные вопросы