هل هناك طريقة لإعداد نوع من فهرس z للموضع z لكائنات UIImageView؟

StackOverflow https://stackoverflow.com/questions/826068

سؤال

أقوم ببناء شبكة من الصور، وأبدأ من الأعلى، وأنشئ كائنات UIImageView في كل مكان.الآن أريد أن تتداخل قليلاً، لكن آخر ما أرسمه هو الأكثر في الأعلى.أرغب في ضبط موضع z برمجيًا، بحيث تكون أول الصور التي أرسمها هي الأكثر في الأعلى.

هل كانت مفيدة؟

المحلول

وقال كنت تستخدم UIImageView. رسم صورة مع UIImageView يعني تهيئة ومن ثم إضافته إلى وجهة نظر الحاوية.

ولا يمكنك فقط استخدام هذا الرمز في حلقة الخاص بك؟

[containerView insertSubview:image atIndex:[[containerView subviews] count]]

والنتيجة ستكون أن وجهة النظر بإضافة أولا على الجزء العلوي من كومة عرض (لم أكن قادرا على اختبار هذه بعد على الرغم من :))

نصائح أخرى

بدلا من استخدام this.insertSubew يمكنك المحاولة:

- (void)bringSubviewToFront:(UIView *)view
- (void)sendSubviewToBack:(UIView *)view

https://stackoverflow.com/a/4631895/2482283

ويمكنك استخدام خاصية zPosition من طبقة طريقة العرض (انها كائن CALayer) لتغيير ض مؤشر الرأي.

theView.layer.zPosition = 1;

وأضاف فيكتور نوردلنج، "القيم الكبيرة هي على القمة. يمكنك استخدام أي القيم التي تريدها، بما في ذلك القيم السلبية." القيمة الافتراضية هي 0.

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

#import "QuartzCore/QuartzCore.h"

وسيلة أخرى ( https://stackoverflow.com/a/4663526/2482283 )، يمكنك أيضا استخدام uiviews الأسلوب:

@property(nonatomic,readonly) UIView *superview;
@property(nonatomic,readonly,copy) NSArray *subviews;

- (void)removeFromSuperview;
- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index;
- (void)exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2;

- (void)addSubview:(UIView *)view;
- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview;
- (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview;

- (void)bringSubviewToFront:(UIView *)view;
- (void)sendSubviewToBack:(UIView *)view;

وليس مباشرة.

وحل واحد سيتم إعطاء UIViews خاصية ض مؤشر. عدد صحيح تحديد مستوى عمق الخاص بك. ثم هل يمكن أن itterate من خلال NSArray (myArray) التي تحتوي على UIViews إضافتها كما subviews من أجل من العمق.

وكان لي نفس المشكلة. أنا في حاجة الى عنصر subview مع أعلى وأدنى مؤشر z. من بلدي التجارب تبين لي أن UIKit يرتب العناصر في subviews الملكية وفقا لمن ض الموقف. إذا كنت تأخذ [self.scrollview subviews] فمثلا. العنصر الأول هو مجموعة subview الذي هو في الجزء الخلفي للغاية. العنصر مجموعة وفقا لأعلى مؤشر هو subview في الجبهة جدا. إذا كنت تستخدم

- (void)bringSubviewToFront:(UIView *)view
- (void)sendSubviewToBack:(UIView *)view`

وسيتم إعادة ترتيب مجموعة subviews وفقا لذلك.

إذا كان لديك المرجع إلى العرض أدناه / أعلاه تحتاج إلى إضافة وجهة الفرعية يمكنك استخدام التالية

[self.view insertSubview:<#(UIView *)#> belowSubview:<#(UIView *)#>];
[self.view insertSubview:<#(UIView *)#> aboveSubview:<#(UIView *)#>];

والواقع، بقدر ما أعرف، لا يوجد أي مؤشر ض موقف الملكية لذلك. رسم في رأي يستخدم نموذج رسم بسيط.

ويمكنك إما وضع المنطق الخاص في حلقة الرسم (أي رسم ما تريد على رأس آخر) أو يمكنك استخدام الكاكاو الرسوم المتحركة، منذ عكس UIImageView، CALayers لا يكون عمق (هم إسقاط 2D من الفضاء 3D) . انظر هنا للحصول على إشارة.

وكنت حقا قد ترغب في النظر في استخدام وCALayer بدلا من الكثير من الأجسام UIImageView. كائنات UIImageView كبيرة ولكن لCALayer الرسم مكثفة هي أخف وزنا وأكثر كفاءة (على الرغم إذا كنت بحاجة إلى مستخدم التفاعل مع الصور، وجوه الرأي أفضل). انها حقا يتوقف على ما تقومون به. CALayers تفعل تحتوي على خاصية zPosition. هذا هو ما يستخدم UIKit عندما يرتب موقف UIView في كومة الرأي.

imageView.layer.zPosition = 100;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top