На iPhone как рассчитать размер символа в пикселях для заданного размера точки?Размер шрифта в пикселях
ответ
размеры Точечные defined as 1/72 of an inch. То есть, 72-точечный шрифт составляет примерно 1 дюйм от самого низкого спуска до самого высокого восхождения. Таким образом, максимальная высота глифа в шрифте 72pt составляет около 1 дюйма.
Apple's iphone tech specs page утверждает, что iPhone в настоящее время имеет разрешение 163 пикселей на дюйм. Таким образом, 72 точки - 163 пикселя или около 2,2639 пикселя на каждую точку. Просто помните, что каждый глиф варьируется по высоте и ширине, поэтому это очень приблизительная оценка размера. Как правило, расстояние между baselines будет немного больше, чем размер точки шрифта, чтобы линии текста не врезались друг в друга.
Если вам нужны точные измерения (и, вероятно, вы это делаете), вам нужно будет фактически измерить глифы шрифтов, используя информацию о метрике шрифта. Вы можете сделать это, используя NSString's UIKit additions, что позволит вам измерять размер конкретной строки при отображении на экране.
Вы не можете надежно преобразовывать точки в пиксели, так как ppi (точек на дюйм) будет меняться от монитора к монитору. Прочитайте;
Тем не менее, некоторые люди собрали несколько справочных таблиц и калькуляторов, которые могут вам начать;
http://www.unitconversion.org/typography/postscript-points-to-pixels-x-conversion.html
Я уверен, что люди не затыкать мониторы в своих iPhone'ов. –
Что делать, если Apple изменит разрешение iPhone без изменения размера физического экрана? ИЦП изменится, и поэтому любая точка конверсии пикселей, сделанная на прежнем PPI, будет избыточной. – Mathew
MatW - Я согласен с тем, что стоит рассмотреть, но в этом случае, скорее всего, мне придется повторно протестировать приложение. Я предполагаю, что у многих приложений есть проблемы. – Ian1971
Я добавлю их, как я понять их:
A sizedToFit UILabel с 12pt systemFont является 15px высока.
Чтобы соответствовать размерам шрифта (в точках) на iPhone4 с размерами шрифта (в точках) в Photoshop, вы должны установить свой документ Photoshop в 144dpi. Я провел несколько тестов, и это разрешение, которое дает результаты 1: 1.
Шаги:
- сделать скриншот «Настройки» Общий »Доступность» Большой текст» на iPhone4
- Открыть скриншот в Photoshop
- Изменить разрешение от 72dpi до 144dpi с «Resample Image» off
- Повторите текст в Photoshop (в точках), чтобы соответствовать размеру i n скриншот
Я рассмотрел ряд различных резолюций, в том числе 163dpi, упомянутых в ответе выше, и я обнаружил, что 144dpi производит результаты 1: 1. Я также проверил это против родного приложения, где я знаю, что размеры точек и 144dpi были там тоже.
Сравнения:
- Side-by-side comparison
- Layered Photoshop file для тех, кто хочет изучить это дальнейшее
и 125% для каждого пробела, кажется, идеально подходят – 2012-08-07 09:13:22
не уверены, что он отвечает на вопрос, но это именно то, что я искал, вы должны в конечном итоге переместить этот ответ на «как подобрать размер шрифта в Photoshop и iOS/xcode» –
работы для меня. Конечно, это относится к разрешениям 1x, а не 2x (Retina). Так, например, на макете iPad, используйте разрешение 768x1024 при 144 dpi для соответствия размерам шрифта. –
Наш художник-график был очень специфичен на некоторых устройствах, чтобы использовать размеры пикселя вместо кегля , Функция ниже вернет шрифт, основанный на размере пикселя. Он использует метод грубой силы, чтобы найти шрифт шкафа, но затем кэширует результаты, поэтому в следующий раз возврат будет очень быстрым. Я всегда ценю комментарии о том, как этот код можно улучшить. Я использую эту функцию как статический член класса в классе, называемом utils. Вы можете легко вставить любой класс, который вы используете. Надеюсь, это поможет.
/** return a font as close to a pixel size as possible
example:
UIFont *font = [Utils fontWithName:@"HelveticaNeue-Medium" sizeInPixels:33];
@param fontName name of font same as UIFont fontWithName
@param sizeInPixels size in pixels for font
*/
+(UIFont *) fontWithName:(NSString *) fontName sizeInPixels:(CGFloat) pixels {
static NSMutableDictionary *fontDict; // to hold the font dictionary
if (fontName == nil) {
// we default to @"HelveticaNeue-Medium" for our default font
fontName = @"HelveticaNeue-Medium";
}
if (fontDict == nil) {
fontDict = [ @{} mutableCopy ];
}
// create a key string to see if font has already been created
//
NSString *strFontHash = [NSString stringWithFormat:@"%@-%f", fontName , pixels];
UIFont *fnt = fontDict[strFontHash];
if (fnt != nil) {
return fnt; // we have already created this font
}
// lets play around and create a font that falls near the point size needed
CGFloat pointStart = pixels/4;
CGFloat lastHeight = -1;
UIFont * lastFont = [UIFont fontWithName:fontName size:.5];\
NSMutableDictionary * dictAttrs = [ @{ } mutableCopy ];
NSString *fontCompareString = @"Mgj^";
for (CGFloat pnt = pointStart ; pnt < 1000 ; pnt += .5) {
UIFont *font = [UIFont fontWithName:fontName size:pnt];
if (font == nil) {
NSLog(@"Unable to create font %@" , fontName);
NSAssert(font == nil, @"font name not found in fontWithName:sizeInPixels"); // correct the font being past in
}
dictAttrs[NSFontAttributeName] = font;
CGSize cs = [fontCompareString sizeWithAttributes:dictAttrs];
CGFloat fheight = cs.height;
if (fheight == pixels ) {
// that will be rare but we found it
fontDict[strFontHash] = font;
return font;
}
if (fheight > pixels) {
if (lastFont == nil) {
fontDict[strFontHash] = font;
return font;
}
// check which one is closer last height or this one
// and return the user
CGFloat fc1 = fabs(fheight - pixels);
CGFloat fc2 = fabs(lastHeight - pixels);
// return the smallest differential
if (fc1 < fc2) {
fontDict[strFontHash] = font;
return font;
} else {
fontDict[strFontHash] = lastFont;
return lastFont;
}
}
lastFont = font;
lastHeight = fheight;
}
NSAssert(false, @"Hopefully should never get here");
return nil;
}
Самый простой способ получить высоту пикселя для данного шрифта и размера, чтобы использовать метод boundingRect на NSString. (Я использую @"Ap"
здесь, чтобы убедиться, что он содержит спусковое и зажим.)
- (CGFloat)heightForFont:(UIFont *)font
{
NSStringDrawingContext *context = [[NSStringDrawingContext alloc] init];
CGRect boundingRect = [@"Ap" boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX) options:NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:font} context:context];
return boundingRect.size.height;
}
- 1. Размер шрифта WebBrowser в пикселях
- 2. Как получить размер шрифта в пикселях?
- 3. Размер символа в пикселях
- 4. Как получить размер (в пикселях) шрифта в приложении WinRT?
- 5. Размер шрифта в пикселях, не работающих в pdf-файле
- 6. Размер шрифта в пикселях и как дробное число
- 7. К какой высоте относится размер шрифта в пикселях?
- 8. Определить размер шрифта в пикселях с помощью jQuery
- 9. Размер шрифта для программной кнопки Android в пикселях
- 10. Размер UIImage в пикселях
- 11. Размер экрана в пикселях
- 12. imagestring - получить размер строки lengh в пикселях
- 13. Размер холста в пикселях (Javascript)?
- 14. Каков размер в пикселях AdSize.BANNER?
- 15. Python: Размер черепахи в пикселях
- 16. Размер шрифта AutoFit Размер шрифта
- 17. Установить цвет шрифта, размер шрифта и размер шрифта в PHPExcel
- 18. шрифт шрифта размер шрифта
- 19. Размер шрифта меню шрифта
- 20. Изменить размер шрифта шрифта
- 21. Размеры шрифта Emacs в пикселях для пиксельных шрифтов фиксированного размера?
- 22. Размер шрифта и размер шрифта не изменится
- 23. Малый размер фигуры в пикселях в Matlab
- 24. java JComponent, который может отображать символ шрифта в пикселях
- 25. Размер шрифта:
- 26. Как преобразовать размер шрифта (в пикселях) в устройство, используемое в документе (мм) для svg
- 27. Как определить размер маркера точки в пикселях
- 28. Как получить размер элемента в физических пикселях?
- 29. Размер экрана в пикселях (iPhone 6)
- 30. Как определить размер Android View в пикселях?
Также стоит отметить, что iPhone не является единственным устройством для iPhone. IPod touch составляет 160 dpi. Итак, уже не все устройства iPhone-OS имеют одинаковое разрешение. Если Apple когда-либо удваивает его, вводит планшет, вводит наручные часы или что-то еще, и вы принимаете фиксированные количества пикселей, вы ввернуты. Независимо от разрешения, потому что, если вы этого не сделаете, ваше приложение когда-нибудь сломается. –
Эй, угадайте, что - Apple представила планшет с разным разрешением dpi :-) – philsquared
также, Apple сделала телефон и ipod с более высоким разрешением на dpi ... ваше приложение наверняка сломается :) –