النوع الديناميكي جيد ، لكنه لا يعمل دائمًا. الآن سوف أخبرك كيف تزداد أدوات التحكم الصغيرة في iOS 13 مجانًا ، دون تسجيل ورسائل نصية قصيرة.
في
مقال سابق ، قمنا بسحب نوع dynamik في قائمة تطبيق Dodo Pizza iOS. اتضح بشكل جيد. لكن شريط علامات التبويب الموجود أسفل القائمة كان صغيراً كما كان - لم يتغير اعتمادًا على إعداد حجم النص.
لم تصل هذه الميزة بعد إلى الإصدار الذي أشعر بالخجل والعار"ولكن كيف يتم ذلك ، دودو؟" لا يهمك الأشخاص ضعاف البصر؟
- اسف!
قليلا عن وضع المدمج في "المكبر"
يعرض شريط علامات تبويب النظام معاينة لكل علامة تبويب طويلة. حاول تضمين حجم النص "المتاح" ، ثم اضغط لفترة طويلة على أي علامة تبويب في علامة تبويب النظام (على سبيل المثال ، في الموسيقى أو في الصور). ستظهر النافذة المنبثقة التالية على الشاشة:
بالإضافة إلى شريط التبويب ، يتم دعم وضع "العدسة المكبرة" بواسطة أزرار في أشرطة الأدوات وأشرطة الأدوات:
حقول البحث:
وبعض الضوابط أكثر.
وبدءًا من iOS 13 ، يمكننا بسهولة إضافة نفس السلوك إلى عناصر التحكم الخاصة بنا.
كيفية ربط UILargeContentViewerItem إلى التطبيق
لسوء الحظ ، فإن هذا البروتوكول موصوف بشكل سيئ في الوثائق ، لكن هذا لا يهم ، لأن API الخاصة به تبدو بسيطة:
@available(iOS 13.0, *) public protocol UILargeContentViewerItem : NSObjectProtocol { var showsLargeContentViewer: Bool { get } var largeContentTitle: String? { get } var largeContentImage: UIImage? { get } var scalesLargeContentImage: Bool { get } var largeContentImageInsets: UIEdgeInsets { get } }
يكفي تنفيذ العديد من هذه الأساليب ، التي تتحدث عنها أسماء لنفسها ، وسيظهر عنصر التحكم لديك معاينة كبيرة عند النقر لفترة طويلة.
تنفيذ بسيط جدا
دعنا نجرب هذا البروتوكول على بعض الزر في التطبيق. على سبيل المثال ، في الزر
i
في بطاقة المنتج:
أضف 3 سطور من الكود:
nutritionButton.showsLargeContentViewer = true nutritionButton.addInteraction(UILargeContentViewerInteraction()) nutritionButton.largeContentTitle = nutritionButton.accessibilityValue
القيام به. بارد ، هاه؟
هنا فقط هو أيقونة الزوج ، والتي يتم سحبها بشكل افتراضي ، أنا لا أحب. سيكون أفضل إذا لم يكن اللونين ، ولكن أحادي اللون مع الشكل المقطوع للحرف
i
. يستخدم هذا فقط لحالة الزر .highlighted.
nutritionButton.largeContentImage = nutritionButton.image(for: .highlighted)
المعايير.
والآن دعنا نختتم التمديد:
extension UIView { public func enableLargeContent(title: String? = nil, image: UIImage? = nil, scales: Bool = true, insets: UIEdgeInsets = .zero) { guard !showsLargeContentViewer else { return } showsLargeContentViewer = true addInteraction(UILargeContentViewerInteraction()) largeContentTitle = title largeContentImage = image scalesLargeContentImage = scales largeContentImageInsets = insets } }
nutritionButton.enableLargeContent(title: nutritionButton.accessibilityValue, image: nutritionButton.image(for: .highlighted))
في الواقع ، العديد من عناصر التحكم ios القياسية بالفعل تنفيذ بعض أساليب هذا البروتوكول. تم إيقاف تشغيل هذا الوضع ، لأنك تحتاج إلى محاولة زيادة المحتوى بالفعل ، بدلاً من إخفاء كل شيء خلف عدسة مكبرة.
أعيد صياغتها: استخدم هذه الميزة فقط كملجأ أخير ، عندما لا يمكنك زيادة التحكم على الإطلاق.
تتوفر الوثائق الخاصة بهذا الأمر بالكامل في Xcode في حالة فتح واجهة UILargeContentViewerItem
.
مشروع تجريبي في بلدي
الريبو على جيثب