سؤال

على اي فون كيف يمكنني حساب حجم حرف في بكسل نقطة معينة الحجم ؟

هل كانت مفيدة؟

المحلول

نقطة الأحجام تعريف 1/72 بوصة.أن 72 نقطة الخط حوالي 1 بوصة من أدنى النسب إلى أعلى الصعود.وبالتالي فإن أقصى ارتفاع الصورة الرمزية في 72pt الخط حوالي 1 بوصة.

اي فون أبل المواصفات الفنية صفحة يدعي أن فون حاليا لديه قرار من 163 بكسل لكل بوصة.حتى 72 نقطة 163 بكسل ، أو عن 2.2639 بكسل لكل نقطة.فقط تذكر أن كل شخص يختلف في الطول والعرض ، لذلك هذا هو تقدير تقريبي جدا من حجم.عموما المسافة بين خطوط الأساس سوف يكون أكبر قليلا من الخط و حجم نقطة بحيث أسطر من النص لا تصطدم بعضها البعض.

إذا كنت بحاجة إلى القياسات الدقيقة (وربما لا) ثم سوف تحتاج إلى الواقع قياس الخط الرموز باستخدام الخط متري المعلومات.يمكنك القيام بذلك عن طريق استخدام NSString هو UIKit الإضافات, والتي سوف تمكنك من قياس حجم معين السلسلة عند عرضه على الشاشة.

نصائح أخرى

لتتناسب مع أحجام الخط (في نقاط) على iPhone4 مع أحجام الخط (في نقاط) في فوتوشوب لديك لوضع الخاص بك فوتوشوب الوثيقة إلى 144dpi.يجب تشغيل عدد من الاختبارات و هذا هو القرار الذي ينتج 1:1 النتائج.

الخطوات:

  • تأخذ لقطة من "إعدادات" العامة "إمكانية الوصول " نص كبير" على iPhone4
  • فتح الصورة في الفوتوشوب
  • تغيير القرار من 72dpi إلى 144dpi مع "إعادة تشكيل صورة" قبالة
  • أعد كتابة النص في برنامج فوتوشوب (في نقاط) لتتناسب مع حجم في الصورة

لقد ذهبت من خلال عدد من القرارات المختلفة ، بما في ذلك 163dpi الذي تم ذكره في الجواب أعلاه ، ووجدت أن 144dpi تنتج 1:1 النتائج.يجب أيضا اختبار هذا التطبيق الأصلي حيث أعرف وجهة أحجام 144dpi كانت مباراة هناك أيضا.

وكان لدينا فنان الرسم محددة للغاية على بعض الأجهزة لاستخدام أحجام بكسل بدلا من حجم نقطة. وظيفة أدناه سيعود خط استنادا إلى حجم بكسل. ويستخدم أسلوب القوة الغاشمة للعثور على الخط خزانة، ولكن بعد ذلك وتخزين النتائج حتى في المرة القادمة العودة ستكون سريعة جدا. أنا دائما نقدر تعليقات على كيف يمكن جعل هذا الرمز أفضل. يمكنني استخدام هذه الوظيفة كعضو الدرجة ثابتة في فئة تسمى تيلس. يمكنك لصق بسهولة إلى أي فئة تستخدمه. آمل أن يكون من بعض المساعدة.

/** 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;
}

وأعتقد كنت تبحث عن ملحقات UIFont NSString التي تسمح لك لحساب حجم سلسلة إعطاء UIFont.

وهنا هو صلة

وعلى وجه التحديد الطرق sizeWithFont.

وأسهل طريقة للحصول على ارتفاع بيكسل للخط معين وحجم هو استخدام طريقة 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;
}

وأود أن أضيف لهم وأنا الرقم بها:

وA sizedToFit UILabel مع systemFont 12pt عالية 15px.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top