القيم الافتراضية لـ CGFloat وCGSize وminFontSize وما إلى ذلك.في وظيفة المجمع

StackOverflow https://stackoverflow.com//questions/22081008

سؤال

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

إذن هذه هي الطريقة التي توصلت إليها:

- (CGSize) getSizeForCurrentFont:(UIFont*)font
                    forWidth:(CGFloat)width
           constrainedToSize:(CGSize)size
               lineBreakMode:(NSLineBreakMode)lineBreakMode
                 minFontSize:(CGFloat)minFontSize
              actualFontSize:(CGFloat *)actualFontSize
{
    // functionality
}

ما سأقوم به هو أنه سيتم استدعاء القيم التي تم تعيينها فقط بينما ستكون الباقي مهما كانت القيمة الافتراضية لها.لذلك، إذا كانت المكالمة تحتوي فقط على الخط والعرض، فسيتم تعيين ذلك فقط.أدرك أن حجم الخط لم يعد مدعومًا، ولكنني أقدر الاقتراحات بشأن ذلك.

سؤالي هو :ما هي القيم الافتراضية التي يجب أن أقوم بتعيين الخط والعرض والحجم وlineBreakMode وminFontSize وactualFontSize حتى لا أحصل على نتائج غريبة.في الأساس، أريد نفس النتيجة لـ:

[s sizeWithFont:font
constrainedToSize:size];

كما هو الحال مع :

[s getSizeForCurrentFont:font 
forWidth:width #This is some Default Value# 
constrainedToSize:size 
lineBreakMode:lineBreakMode #This is some Default Value# 
minFontSize:minFontSize #This is some Default Value# 
actualFontSize: actualFontSize #This is some Default Value#]

أخبرني إذا كان هناك حاجة إلى مزيد من التوضيح.إذا كان بإمكانك اقتراح طريقة لطيفة للقيام بـboundingRectWithSize، فسيكون ذلك رائعًا أيضًا.

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

المحلول

هل يمكن التفاف البدائيات في الكائنات؟لذلك سيكون لديك:

- (CGSize) getSizeForCurrentFont:(UIFont*)font
                    forWidth:(NSNumber*)width
           constrainedToSize:(NSValue*)size
               lineBreakMode:(NSNumber*)lineBreakMode
                 minFontSize:(NSNumber*)minFontSize
              actualFontSize:(NSNumber*)actualFontSize
{
    // functionality
}

سيتم تعيين أي قيم "افتراضية" على صفر.ل CGFloat, ، يمكنك إنشاؤها باستخدام:

CGFloat value = 10.0f;
NSNumber* valueObj = @(value);

ل NSValue, ، يمكنك استخدام:

CGSize size = CGSizeMake(10.0f, 10.0f);
NSValue* sizeObj = [NSValue valueWithCGSize:size];

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

نصائح أخرى

يمكنك إنشاء طريقة:

- (CGSize) sizeWithFont:(UIFont*)font constrainedToSize:(CGSize)size {
    [self getSizeForCurrentFont:font 
        forWidth:#some Default Value# 
        constrainedToSize:size 
        lineBreakMode:#some Default Value# 
        minFontSize:#some Default Value# 
        actualFontSize:#some Default Value#]
}

هذه هي أبسط طريقة لإنشاء "القيم الافتراضية".

تحديث سويفت 4.2

 let size = CGSize(width: 0, height: 0)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top