SubspaceModifier דומה ל-Compose modifier עבור קומפוזבלים ב-Subspace. SubspaceModifier מאפשרת לכם לשנות את הקומפוזיציות במרחב תלת-ממדי, ולעזור לכם למקם, לסובב ולהוסיף התנהגויות לצמתי פריסה תלת-ממדיים.
פריסה
כברירת מחדל, Subspace מוגבל על ידי המרחב המומלץ לצפייה באפליקציה. המגבלות האלה משמשות למדידת הפריסה של רכיבי המרחב המשני, בדומה למגבלות בפריסות דו-ממדיות של Compose.
מילוי גבולות
המשנים fillMaxSize, fillMaxWidth, fillMaxHeight ו-fillMaxDepth גורמים לתוכן למלא (באופן חלקי) את הגבולות של רכיב האב.
שימוש במאפייני מילוי עוזר לפריסת התוכן באפליקציה באופן שלא תלוי במאפייני התצוגה של מכשיר ה-XR.
הגדרת הגודל בפועל והגודל הנדרש
המשנים size, width, height ו-depth
מגדירים את הגודל המועדף של התוכן. כדי להצהיר על הגודל המדויק של התוכן, משתמשים בתגי requiredSize, requiredWidth, requiredHeight ו-requiredDepth. צריך לציין את היחידות האלה במאפיין dp. כדי להמיר ממטרים ל-dp, צריך להשתמש ב-Meter.toDp().
מיקום הרכיבים הקומפוזביליים
offset
העיבוד offset מעביר את הרכיב הקומפוזבילי במרחב תלת-ממדי לאורך הצירים x, y ו-z. צריך לציין את היחידות האלה ב-dp. כדי להמיר ממטרים ל-dp, משתמשים ב-Meter.toDp().
rotate
המשנה rotate מסובב את הרכיב הניתן להרכבה שצוין במרחב. אפשר לציין את כיוון הסיבוב ואת זווית הסיבוב בכמה דרכים:
- השימוש ב-pitch, yaw ו-roll, שמציינים את הסיבוב סביב הצירים
x,yו-zבהתאמה, - שימוש ב-
axisAngle, שהואVector3שמייצג את ציר הסיבוב, ואת מספר המעלות שצריך לסובב סביבו, - שימוש ב-
Quaternionשמייצג את הסבב.
rotateToLookAtUser
המשנה rotateToLookAtUser מסובב את התוכן באופן רציף כך שהוא תמיד פונה אל המשתמש. אפשר גם להשתמש במאפיין הזה כדי ליצור אפקט של שלט חוצות, שבו התוכן מסתובב כדי להיות מול המשתמשים בציר Y, אבל עדיין נשאר זקוף ומיושר עם כוח המשיכה. כדי לעשות את זה, משלבים את הערך לשינוי ההנחה rotateToLookAtUser עם הערך לשינוי ההנחה gravityAligned.
העברה ושינוי גודל באמצעות רכיבים קומפוזביליים
המשתמשים יכולים לשנות ישירות את המיקום והגודל של אובייקטים במרחב תלת-ממדי. אפשר להוסיף את התוספים האלה לרכיבים בודדים (כמו SpatialPanel), לתת-מרחבים ולרכיבי פריסה מרחבית (כמו SpatialRow או SpatialColumn).
העברת רכיבים
אם ה־movable modifier קיים ומופעל, יוצגו רכיבים אינטראקטיביים של ממשק משתמש שניתנים לגרירה, שיאפשרו למשתמש להזיז את הרכיב במרחב תלת-ממדי. ההתנהגות הספציפית של התנועה הזו מוגדרת על ידי movePolicy שסופק:
-
MovePolicy.default: המערכת מטפלת בתנועה באופן מלא ומחשבת ומחיל באופן אוטומטי את התנוחה והקנה מידה החדשים על סמך קלט של משתמשים. -
MovePolicy.custom: המערכת מחשבת את תנוחת היעד על סמך הקלט, אבל לא מחילה אותה באופן אוטומטי על הרכיב המשויך. האפשרות הזו שימושית להגבלת התנועה או ליצירת תנועה מותאמת אישית באפליקציה.
שינוי הגודל של אלמנטים
כשהמשנה resizable() קיים ומופעל, יוצגו אמצעי בקרה בממשק המשתמש שיאפשרו למשתמש לשנות את הגודל של הרכיב במרחב התלת-ממדי. ההתנהגות הספציפית של שינוי הגודל מוגדרת על ידי resizePolicy שצוין:
-
ResizePolicy.default(): המערכת מטפלת אוטומטית בתנועת שינוי הגודל ומחילת את המידות החדשות על התוכן. -
ResizePolicy.custom(): המערכת מספקתSpatialResizeEventולא מחילה באופן אוטומטי את תוצאת שינוי הגודל על הרכיב המשויך.
שינוי המראה של הרכיבים הקומפוזביליים
alpha
המשנה alpha מגדיר את האטימות של הרכיב ושל רכיבי הצאצא שלו, כאשר 0f מייצג שקיפות מלאה ו-1.0f מייצג אטימות מלאה.
scale
המשנה scale משנה את קנה המידה של התוכן של הרכיב הניתן להרכבה לאורך הצירים האופקי, האנכי והעומק.
בדיקות ונגישות
semantics
העיבוד semantics מוסיף סמנטיקה לצומת הפריסה, לשימוש בבדיקות ובנגישות. מידע נוסף זמין במאמרים Semantics in Jetpack Compose ו-SemanticsModifier.
testTag
המשנה testTag הוא קיצור של SemanticsPropertyReceiver.testTag, שמאפשר למסגרות בדיקה למצוא את הרכיב בבדיקות.