لا يزال عمر الجميع 404 ، واليوم نحن نغوص في U المحبوب ، أو بشكل أكثر دقة في إطار عمل UIKit. باختصار ، UIKit هو إطار عمل UI يسهل على المطورين إنشاء واجهة لتفاعل المستخدم. ولكن على الرغم من حقيقة أن UIKit يحتوي على قدر كبير من الوظائف ، فإن حجمه يُحسب بعشرات الكيلوبايتات. والسبب في ذلك هو حقيقة أن UIKit في iOS الحديث هو في الأساس رأس مظلة توفر نقطة استيراد واحدة.
أدخل كما هو
يحتوي UIKit على جميع المكونات الضرورية لتوفير الوصول إلى الأجهزة التي يتواصل المستخدم من خلالها مع تطبيقك. هذه هي مقاييس التسارع وأزرار الأجهزة ولوحات المفاتيح الخارجية وأجهزة الإدخال الخاصة للأشخاص ذوي الإعاقة والفئران وأقلام الرصاص (Apple Pencil).
لا تنس أنه بالإضافة إلى جهاز الإدخال المذكور أعلاه ، يتلقى UIKit الكثير من المعلومات ويعالجها من النظام ، من الأحداث منخفضة المستوى لدورة حياة التطبيق وتحذيرات الذاكرة ، إلى دفع الإخطارات على مستوى أعلى.
من أجل تقديم مثل هذا العدد الكبير من مصادر الأحداث الواردة بكفاءة ، يحتاج UIKit إلى Event Loop ، والذي استخدمناه لاستدعاء RunLoop . هذا هو المكان الذي يقدم فيه UIKit مفهوم الخيط الرئيسي الذي يخدم بشكل تسلسلي المصادر الواردة ورمزنا. من المقبول عمومًا أن الخيط الرئيسي هو شيء متأصل في التطبيق ، ولكنه في الواقع فكرة مجردة تقدمها UIKit وتقدمها.

, RunLoop' — - , . , UIKit UI . , . , , . . , , RunLoop', UIKit' UI Tracking Mode. UI, .
, ?
Haptic. UI , , UIKit. , Apple Core Audio.
, . iOS, , 2D , - . : , , GPU. : .
, Layout
UIKit — . , view' , subview subview. . , , , .
, , autolayout 3rd-party . , iOS — , .
autolayout iOS . UIView , Core Animation, c anchorPoint .
.
— . - . Apple , LayerKit, Core Animation.
Core Animation — , . , , , - . , - , Core Animation , .
Core Animation , . UIView CALayer, . , view, . : , UIView UI, CALayer. view, . frame, bounds, center, backgroundColor CALayer.

UIView : UIView User Interaction, CALayer .
Core Animation iOS UIKit
UIView, macOS AppKitNSView. macOS iOS: — , iOS. Core Animation ApplegeometryFlippedCALayer. macOS , UIKitgeometryFlipped = true. , , , .
, Core Animation , . , CALayer - CoreGraphics . , CAShapeLayer, CATextLayer, CAGradientLayer . , GPU.
, UIView
draw(in:). , GPU,draw(in:)CoreGraphics, CPU. UI. , CoreGraphics ( , ), CPU.
-
CoreAnimation, : - CALayer ( ) , .
, CoreAnimation , , - . , CATransaction. CATransaction — , , . UIKit CATransaction RunLoop', . , «» . , CATransaction, .
CALayer , UIView - . frame UIView , , . , UIView view . , , action(for:forKey:) View nil' , UIView.animate(...), .
, actions, - .
, addSublayer() UIView UIView.animate(withDuration:5). : 5 , ( ) . .
⚠️ UIView . , view , .
-
, , . CAAnimation, ( ), -, , «», «» . , CAAnimation — , . , , « »:
[CABasicAnimation]— ,fromPointtoPoint[CAKeyFrameAnimation]— , ,valueskeyTimes[CASpringAnimation]—
presentationLayer . , . , , , . , «» «» . presentationLayer , , . :
( )
(
fromValuepresentation )(
hitTest(_:with:)(point(inside:with:)) , ,point(inside:with:))
, isRemovedOnCompletion. false .
تجدر الإشارة إلى أن الرسوم المتحركة تعتمد على دورة حياة التطبيق والطبقة نفسها. عندما ينتقل التطبيق إلى الخلفية أو تتم إزالة الطبقة من العرض المشرف ،CAAnimation تتم إزالة الرسوم المتحركة ، لذلك إذا قمت بتصغير التطبيق في منتصف الرسوم المتحركة ، فسترى الكائن في الحالة التي كان عليها قبل بدء الرسوم المتحركة.
وهنا نهاية الحكاية الخيالية
أتمنى أن تكون قد وجدت شيئًا جديدًا أو قمت بتحليل المعرفة الموجودة على الرفوف ، على الأقل قليلاً. جميع المشاريع الشيقة والكود النظيف: د