واجهة مستخدم جهاز IOS

لا يزال عمر الجميع 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, .  frameboundscenterbackgroundColor  CALayer.

UIView : UIView User Interaction, CALayer .

Core Animation iOS UIKit  UIView, macOS AppKit  NSView. macOS iOS: — , iOS. Core Animation Apple  geometryFlipped  CALayer. macOS , UIKit   geometryFlipped = true  . , , , .

, Core Animation , . , CALayer - CoreGraphics . ,  CAShapeLayerCATextLayerCAGradientLayer  . , 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]— ,  fromPoint  toPoint

  • [CAKeyFrameAnimation] — , ,  values  keyTimes

  • [CASpringAnimation]

 presentationLayer  . , . , , , . , «» «» .  presentationLayer  , , . :

  • ( )

  • (  fromValue  presentation )

  • (  hitTest(_:with:) (  point(inside:with:)) , ,  point(inside:with:)  )

,  isRemovedOnCompletion.  false  .

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

وهنا نهاية الحكاية الخيالية

أتمنى أن تكون قد وجدت شيئًا جديدًا أو قمت بتحليل المعرفة الموجودة على الرفوف ، على الأقل قليلاً. جميع المشاريع الشيقة والكود النظيف: د




All Articles