لتشغيل Project Example ، استنساخ REPO ، وتثبيت pod install من الدليل المثال أولاً.
يتوفر Giotto من خلال Cocoapods. لتثبيته ، ما عليك سوى إضافة السطر التالي إلى podfile الخاص بك:
pod "Giotto" Giotto متاح بموجب ترخيص Apache. انظر ملف الترخيص لمزيد من المعلومات.
يولد SdtheMemanager (من الآن فصاعداً يسمى TM) بشكل أساسي بقصد تبسيط وتوحيد التطوير للتطبيقات التي تتطلب إعادة تسمية واجهة المستخدم الرسومية.
يجب أن يحتوي Plist الذي يصف موضوعًا على قاموس ثوابت مع جميع الثوابت ، في حين يمكن ترتيب الأنماط حسب الرغبة في القواميس الأخرى.
أنه يحتوي على جميع الثوابت مثل أسماء الخطوط أو الألوان أو الأحجام. من الناحية الفنية ، إنه قاموس منظم من مستوى واحد على النحو التالي: <costant_name> : <costant_value> حسب المؤتمر ، يكون للمفاتيح البادئات التالية:
- أسماء الخطوط: يبدأ المفتاح بـ
FONT_- رموز الألوان: يبدأ المفتاح
COLOR_- الأبعاد (عدد صحيح o float): يبدأ المفتاح مع
DIMENSION_
Esempi:
{
“FONT_REGULAR” : “Helvetica-Neue”,
“COLOR_COMMON_BACKGROUND” : “color:000000FF”,
“DIMENSION_VIEW_WIDTH” : 3 // value is a NSNumber
}
color: موضح في القسم لا يمكن أن تحتوي ثوابت على صفيف أو قاموس كقيمة.
في نفس المستوى مثل الثوابت ، يمكن تعريف القواميس الأخرى على أنها مجموعات وظائف من أنماط الرسوم. أسماء المجموعات مجانية. من الناحية الفنية ، فهي قواميس منظمة على النحو التالي: <style_name> : <style_dictionary> يتم تنظيم قاموس النمط على النحو التالي: <property_name> : <value_to_apply> أمثلة:
{
“CommonLabel” :
{
“_superstyle”: <style name of parent>,
“textColor” : “COLOR_COMMON_LABEL”,
“font”: “font:FONT_REGULAR,18”
},
“HomeViewController” :
{
“titleLabel” : “style:CommonLabel”,
“textField” :
{
“textColor” : “color:FFFFFF”,
“width” : “DIMENSION_FIELD_WIDTH”,
“layer.borderWidth” : 2
}
}
}
الاتفاقيات _superstyle" ، style: وخط font: موضحة في اتفاقيات القسم
من أجل تسريع صياغة الموضوعات والسماح بمعالجة حالات معينة ولكن متكررة ، تم تعريف الاتفاقيات التالية:
_superstyle: يمكن إدخالها في قاموس النمط للإشارة إلى أن النمط يرث من نمط آخر. عندما يتم تطبيق نمط "الوالد" قبل نمط "الطفل" ، يمكنك الكتابة فوق المفاتيح في "الطفل". يمكنك أن ترث من أنماط متعددة عن طريق تقسيمها بالتتابع على "،". سيتم تطبيق الأنماط المشار إليها بالترتيب ، وبالتالي فإن النمط الذي يظهر بعد الكتابة فوق قيمة المفاتيح التي تشترك فيها بأسلوب يسبقه في القائمة.
style:style_name1,style_name2: يتم تمييز الخاصية المشار إليها في المفتاح مع الأنماط المدرجة في القائمة. يجب أن تكون الأنماط المعروضة موجودة في إحدى مجموعات الأنماط. الإصدار المختصرs: style_name1,style_name2. كما_superstyleيتم تطبيق الأنماط المعروضة بالترتيب.font:font_name, font_size: nstantiates a uifont وتعيينها كقيمة للخاصية المحددة في المفتاح. يمكن أيضًا استخدام هذه الاتفاقية في الثوابت. الإصدار القصيرf: font_name, font_size.يمكن أن يأخذ
font_nameالقيم التقليدية لتحميل خط النظام:
system`systemBold``systemItalic`
color:color_string: يعرض Color_String لإنشاء إنشاء uicolor للتحقق من صحة الخاصية المحددة في المفتاح. يمكن أيضًا استخدام هذه الاتفاقية في الثوابت. الإصدار القصيرc: color_string.nullأوnil: تعيين الخاصية المشار إليها في المفتاح كماnil.point:x,y: اضبط الخاصية على أنها cgpoint مع قيم x و y. يتم تفسير قيم X و Y على أنها تعويم.size:width,height: اضبط الخاصية على أنها cgsize مع قيم العرض والارتفاع المشار إليها. يتم تفسير القيم على أنها تعويم.rect:x,y,width,height: اضبط الخاصية على أنها CGRECT مع القيم X ، Y ، العرض ، والارتفاع. يتم تفسير القيم على أنها تعويم.edge:top,left,bottom,right: اضبط الخاصية على أنها قيم uiedginsets ذات القيم العلوية واليسرى والأسفل واليمنى. يتم تفسير القيم على أنها تعويم.
كما ذكرنا سابقًا ، يشبه النمط مثل قاموس في إحدى مجموعات الأنماط ويمكن تطبيقه على أي NSOBject (عادةً عنصر واجهة). يمكن أن تكون مفاتيح القاموس:
- إحدى الاتفاقيات الممنوحة للمفاتيح (انظر الفقرة المخصصة)
- خاصية للكائن ليتم منمحها
- مفاتيح واحدة من خاصية الكائن ليتم منمحها (على سبيل المثال "layer.borderColor")
- سلسلة لا تشير إلى خاصية عقارية ولكن سيتم التعامل معها بالطريقة المناسبة التي يرثها كل كائن من فئة NSObject+Homemanager (انظر إدارة الممتلكات الخاصة ).
- قائمة الخصائص أو المفاتيح مفصولة "،" (Es. TextColor ، Layer.BorderColor).
قد يكون العقار المشار إليه أيضًا nsarray (مثل iBoutletCollection). في هذه الحالة ، يتم تطبيق القيمة على جميع الكائنات في الصفيف.
لتطبيق نمط تم إعلانه في Plist على كائن ، ما عليك سوى استخدام السطر التالي من التعليمات البرمجية:
[[SDThemeManager sharedManager] applyStyleWithName:@"NomeStile" toObject:object];
قد يكون الكائن المشار إليه أيضًا ذاتيًا .
تحتوي المكتبة على فئة nsobject+thememanager التي تكشف الطريقة:
- (void) applyThemeValue:(id)value forKeyPath:(NSString*)keyPath;
يتم تجاوز هذه الطريقة من خلال فئات بعض الفئات الفرعية للتعامل مع بعض الخصائص بطريقة خاصة. يتم تضمين هذه الفئات دائمًا في مكتبة Sysdata. على سبيل المثال. يدير UITextfield+Homemanager الممتلكات المزيفة للألوان المزيفة لاستخدام " ProvidePplaceholder" .
تعلن فئة NSObject+Homemanager البروتوكول:
@protocol ThemeManagerCustomizationProtocol <NSObject>
@optional
- (BOOL) shouldApplyThemeCustomizationForKeyPath:(NSString*)keyPath;
- (void) applyCustomizationOfThemeValue:(id)value forKeyPath:(NSString*)keyPath;
@end
تتيح طرق هذا البروتوكول إدارة المخصصات المخصصة خارج المكتبة نفسها. هذه هي الطرق الوحيدة التي يجب استخدامها خارج المكتبة لتجنب المخاطرة بتنفيذ الطريقة الموصوفة مسبقًا.
shouldApplyThemeCustomizationForKeyPath: يجب أن تعود YES فقط للكماشة التي تنوي التعامل معها يدويًا.
Method applyCustomizationOfThemeValue:forKeyPath: يجب أن تحتوي على التنفيذ المخصص للكماشة المقبولة بالطريقة السابقة.
يتطلب thememanager بالضرورة موضوعًا افتراضيًا ويمكن الإشارة إلى أنماط بديلة أو أكثر اختياريًا بواسطة الطريقة:
- (void) setAlternativeThemes:(NSArray*)alternativeThemes
يجب أن يحتوي الصفيف السابق على أسماء ملفات plist للموضوعات البديلة. عندما تحاول تطبيق نمط ، يبحث thememanager منه في الموضوع البديل الأول. إذا لم تجدها في الثانية وما إلى ذلك. إذا لم يكن أي من الموضوعات البديلة يحتوي على النمط المشار إليه ، فإن The Homemanager يبحث عنه في السمة الافتراضية.
النظام مهم !!!
الإصدار 2 من The Homemanager متوافق مع الخلف. للتعامل مع التوافق مع تنسيقات plist القديمة ، يجب أن تحتوي بالتنسيق الجديد بالضرورة على زوج القيمة الرئيسية: “formatVersion” : 2
يمكن للطرق التالية تغيير السمة والقيم الثابتة بطريقة برمجية.
تعديل قيمة ثابتة بطريقة البرنامجية.
- (void) modifyConstant:(NSString*)constant withValue:(id)value
قم بتعديل قيمة النمط في مسار معين بطريقة برمجية.
- (void) modifyStlye:(NSString*)style forKeyPath:(NSString*)keyPath withValue:(id)value
انتباه :
بشكل افتراضي ، قم بتعديل نمط إعداد بعض المفاتيح استبدال النمط بالكامل في الحزمة باستخدام مفاتيح جديدة فقط. إذا كنت ترغب في الحصول على جميع قيم المفاتيح الأخرى المحددة في السمات الأساسية ، فهي نشطة الميراث
- (void) modifyStyle:(NSString*)style inheritanceEnable:(BOOL)inheritanceEnable
لاستمرار جميع تعديل التعديل برمجيا لتركيبها أيضا في إعادة تشغيل التطبيق التالي. وإلا فإن جميع التعديلات ستكون متاحة للجلسة الحالية.
- (void) synchronizeModifies
لإعادة تعيين جميع التعديل المحدد برمجياً (باستخدام ModifyConstant: withvalue: أو modifystlye: forkeypath: whatvalue :)
- (void) resetModifies