سؤال

أريد أن أفعل شيئًا كهذا ، لكن لا يمكنني الحصول على بناء جملة تعاونية.

static const UIColor *colorNavbar = [UIColor colorWithRed: 197.0/255.0 green: 169.0/255.0 blue: 140.0/255.0 alpha: 1.0];

أفترض أنه يمكنني تحديد وحدات الماكرو ، لكنها قبيحة.

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

المحلول

أحب استخدام الفئات لتوسيع الفصول مع طرق جديدة لهذا النوع من الأشياء. إليك مقتطف من الكود الذي كتبته للتو اليوم:

@implementation UIColor (Extensions)

+ (UIColor *)colorWithHueDegrees:(CGFloat)hue saturation:(CGFloat)saturation brightness:(CGFloat)brightness {
    return [UIColor colorWithHue:(hue/360) saturation:saturation brightness:brightness alpha:1.0];
}

+ (UIColor *)aquaColor {
    return [UIColor colorWithHueDegrees:210 saturation:1.0 brightness:1.0];
}

+ (UIColor *)paleYellowColor {
    return [UIColor colorWithHueDegrees:60 saturation:0.2 brightness:1.0];
}

@end

الآن في الكود يمكنني أن أفعل أشياء مثل:

self.view.backgroundColor = highlight? [UIColor paleYellowColor] : [UIColor whitecolor];

وتناسب الألوان المحددة الخاصة بي إلى جانب تلك المحددة من قبل النظام.

(بالمناسبة ، بدأت أفكر أكثر من حيث HSB أكثر من RGB لأنني أولي اهتمامًا أكبر للألوان.)

تحديث بخصوص حساب القيمة: حدسي هو أنه لا يستحق ذلك. ولكن إذا أردت حقًا ، فيمكنك وضع مذكرات القيم ذات المتغيرات الثابتة:

+ (UIColor *)paleYellowColor {
    static UIColor *color = nil;
    if (!color) color = [UIColor colorWithHueDegrees:60 saturation:0.2 brightness:1.0];
    return color;
}

هل يمكن أن تجعل الماكرو يفعل المذكرة أيضًا.

نصائح أخرى

عادةً ما أقوم بعمل فئة من uicolor لكل مشروع:

@interface UIColor (ProjectName)

+(UIColor *) colorForSomeTable;
+(UIColor *) colorForSomeControl;
+(UIColor *) colorForSomeText;

@end

مع الثوابت في التنفيذ:

@implementation UIColor (ProjectName)

+(UIColor *) colorForSomeTable { return [UIColor colorWithRed:...]; }

@end

أفعل نفس الشيء بالنسبة لـ UIFONT و UIIMAGE حسب الحاجة.

للتوسع في إجابة Jasoncrawford (سأضع هذا كتعليق ، لكن لا يمكنك تنسيق الكود في التعليقات) إذا كنت ترغب في الحصول على القيم المسبقة (أو القيام بذلك مرة واحدة فقط).

+ (UIColor *)paleYellowColor
{
    static UIColor* paleYellow = nil;
    if (paleYellow == nil)
    {
        paleYellow = [UIColor colorWithHueDegrees:60 saturation:0.2 brightness:1.0];
    }
    return paleYellow;
}

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

static UIColor* colorNavBar = nil;

+(void) initialize
{
    if (colorNavBar != nil)
    {
        colorNavBar = ....
    }
}

nb const التصفيات على التعريف الأصلي الخاص بك زائدة عن الحاجة منذ ذلك الحين UIColor غير قابل للتغيير على أي حال.

يمكنك "تحديد" ثابت مماثل مثل هذا:

#define FAV_COLOR [UIColor colorWithRed:24/255.0f green:89/255.0f blue:36/255.0f alpha:0.9]

واتصل بها بالاسم كما كنت معتادًا على الثوابت: FAV_COLOR

امل ان يساعد.

يمكنك القيام بالأمر:

#define backgroundColorApp [UIColor colorWithRed: 197.0/255.0 green: 169.0/255.0 blue: 140.0/255.0 alpha: 1.0]

في سويفت: تحديد التمديد

extension UIColor {

   class func XXXWhiteColor() -> UIColor {
        return UIColor(red: 256, green: 256, blue: 256, alpha: 1.0)
    }

    class func XXXGreenColor() -> UIColor {
        return UIColor(red: 73/255.0, green: 212/255.0, blue: 86/255.0, alpha: 1.0)
    }
}

استخدم مثل: label.background = uicolor.xxxxwhitecolor ()

#define textColorApp [UIColor colorWithRed: 197.0/255.0 green: 169.0/255.0 blue: 140.0/255.0 alpha: 1.0]

myLabel.textColor=textColorApp;

فقط حدد الماكرو أدناه في ملفك الثابت وتمرير قيمة RGB فقط واستخدمه في أي مكان تريده

#define RGBCOLOR(r,g,b)[UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1]

ليستخدم :

[lblCount setTextColor:RGBCOLOR(236, 43, 92)];

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

let color: UIColor = #colorLiteral(red: 0.9607843137, green: 0.4784313725, blue: 0.3215686275, alpha: 

عند لصقها في Xcode ، يقوم هذا الجملة بإنشاء صندوق ألوان بسيط.انقر هنا لمشاهدة مثال.

بمجرد رؤية المربع ، يمكنك بعد ذلك النقر فوقه على تعديله بسهولة. وبالمثل ، يمكنك التبديل بين خيارات IB المختلفة ، بما في ذلك Sliders RGB, ، إذا كان لديك قائمة محددة من قيم سداسي اللون من المصمم الخاص بك.

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