سؤال

أحاول مؤخرا أن أحاول حفظ الوقت عن طريق التقليل من مقدار الوقت الذي يقضيه في تخصيص الموارد والازدواجية كصور باستخدام uiimageviews و UIIMages بالفعل.

ما أحاول القيام به هو الحفاظ على خريطة لجميع UiImages - كل واحد فريد من نوعه، وإعادة تعيين كل واحد إلى عدة uiimageviews، حسب الطلب من محرك اللعبة. مع تقدم اللعبة، أقوم بإزالة بعض UIIMAGEVEVEVEVEJEVEVENS من العرض، وقد أعيد استخدامها لاحقا مع UIIMages محملة مسبقا مختلفة.

في المرة الأولى التي أقوم بإنشاء UiimageView أفعل شيئا مثل:

m_imageview = [[uiimageview alloc] initwithimage: indicimg]؛

m_parentview addsubview: m_imageview]؛

وفي الأوقات التالية ببساطة تبديل الصورة:

m_imageview.image الافراج]؛

m_imageview setimage enotorvedimg]؛

المشكلة هي أنه بعد التبديل، حجم الصورة الجديد كما هو معروض مطابق لحجم الصورة الأولية. لقد تجاوزت المشكلة عن طريق إعادة إنشاء UiimageView في كل مرة (والتي تبدو وكأنها مضيعة للوقت)، لكنني أتساءل عن سبب حدوث ذلك وكيف يمكنني منعها.

شكرا،

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

المحلول

يقول مستندات UiimageView "هذه الطريقة تضبط إطار المتلقي لتتناسب مع حجم الصورة المحددة." عند استدعاء "SETIMAGE:"، لديك باستخدام STARTER خاصية بسيطة. لا يتم إعادة الحساب الإضافي. إذا كنت بحاجة إلى إعادة ضبط حجم إطار UiimageView، فسيتعين عليك القيام بذلك يدويا.

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

uiimageview + resizing.h:

@interface UIImageView (Resizing)

- (void) setImage:(UIImage *)newImage resize:(BOOL)shouldResize;

@end

uiimageview + resizing.m:

@implementation UIImageView (Resizing)

- (void) setImage:(UIImage *)newImage resize:(BOOL)shouldResize {
  [self setImage:newImage];
  if (shouldResize == YES) {
    [self sizeToFit];
  }
}

@end

الآن، كلما احتجت لتغيير صورة وتغيير حجم ImageView، ما عليك سوى #mport UiimageView + تغيير حجمه واستخدام:

[myImageView setImage:anImage resize:YES];
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top