VisionOS-UI-Framework
تخطيطات مكانية (spatial layouts)، وcarousel، ومعالجة immersive space، وmanipulation محدود لـ visionOS، باستخدام SwiftUI وRealityKit.
الترخيص: MIT
حزمة Swift بلا اعتماديات (الوحدة VisionUI) لـ visionOS 2 وiOS 18 وmacOS 15. خمسة layouts تضع views من SwiftUI وentities من RealityKit في ثلاثية الأبعاد (3D) من البيانات نفسها، وcoordinator يفتح ويُغلِق immersive spaces بطلب واحد في كل مرة، وstate من نوع قيمة (value-type) يحافظ على الأجسام المسحوبة والمُقرَّصة (pinched) والمُدارة ضمن الحدود التي تضعها. على iOS وmacOS تُرسَم الـ layouts كما تُرى من الأمام، لذا يعمل الكود نفسه هناك أيضًا.
الميزات
- خمسة layouts (arc وring وgrid وsphere وhelix) تُرجِع موضعًا بالمتر واتجاهًا (orientation) لكل عنصر، لـ views من SwiftUI عبر SpatialLayoutView، ولـ entities من RealityKit عبر arrangeChildren(using:)
- SpatialCarousel: حلقة من views تُدار بسحب (drag) وتستقر على أقرب view، مع binding للاختيار (selection)، وإجراء VoiceOver قابل للتعديل (adjustable action)، ودعم Reduce Motion
- ImmersiveSpaceCoordinator يرفض طلبًا ثانيًا أثناء transition، ويُغلِق space واحد قبل فتح آخر، ويتجاهل الإجابات المتأخرة للطلبات المُستبدَلة، ويتبع النظام عندما يُغلَق space بـ Digital Crown
- ManipulationState يحافظ على جسم داخل صندوق ونطاق تحجيم (scale range)، مع دوران حر أو عمودي (upright) أو مقفول، وyaw snapping، وقيمة بداية واحدة لكل gesture
- SpatialCard، وtoolbar يتحول إلى ornament على visionOS، ومناطق لمس (hit targets) بأحجام تتبع إرشادات Apple (60 pt على visionOS، و44 على iOS، و28 على macOS)
- فحوصات مدخلات على كل API عام: الأعداد محدودة بسقف 4096 عنصرًا، والأطوال بسقف 10 كم، ووسيطات NaN أو اللانهائية (infinite) تعود إلى قيم افتراضية موثَّقة
- 97 اختبار Swift Testing تعمل على macOS ومحاكي iPhone؛ 87 منها، أي جميعها باستثناء اختبارات البكسل (pixel tests)، تعمل أيضًا على محاكي visionOS
- كتالوج DocC بأربع مقالات وتطبيق المثال SpatialGallery لـ visionOS وiOS وmacOS؛ أمثلة README تُترجَم (compiled) من كلٍّ من التطبيق والاختبارات
البدء السريع
1import SwiftUI2import VisionUI3 4struct ContentView: View {5 let planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter"]6 7 var body: some View {8 SpatialLayoutView(.arc(radius: 0.6, spacing: 0.17), planets, id: \.self) { planet in9 SpatialCard {10 Text(planet)11 .font(.title)12 }13 }14 }15}التثبيت
Xcode (File › Add Package Dependencies…)
1https://github.com/muhittincamdali/VisionOS-UI-Framework.gitSwift Package Manager
1dependencies: [2 .package(url: "https://github.com/muhittincamdali/VisionOS-UI-Framework.git", from: "2.0.0")3],4targets: [5 .target(name: "YourApp", dependencies: [6 .product(name: "VisionUI", package: "VisionOS-UI-Framework")7 ])8]لقطات الشاشة






الجدول الزمني
فُتح المستودع؛ معظم شهره الأول ذهب إلى صفحات دوكيومنتيشن وworkflows
وُسم v1.0.0؛ أعلن manifest الخاص به .visionOS(.v1_0)، إصدار منصة غير موجود، لذا لم يتمكن Swift Package Manager من حلّه (resolve)
أُزيلت المكوّنات واختُزِل الحزمة إلى كود placeholder
v2.0.0: أُزيلت الـ placeholders وأُعيدت كتابة الحزمة من الصفر باسم VisionUI، بخمسة layouts مكانية، وcoordinator لـ immersive space، وmanipulation محدود، و97 اختبارًا، وDocC، وتطبيق مثال لثلاث منصات