هل ينتهي لون الخلفية colorWithPatternImage بالامتداد إذا تغير حجم العرض، بدلاً من التكرار؟

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

  •  07-07-2019
  •  | 
  •  

سؤال

أقوم بتعيين خلفية عرض لصورة متكررة باستخدام colorWithPatternImage.إذا تغير حجم العرض بعد أن قمت بتعيين الخلفية في المرة الأولى، فسيتم تمديد الصورة بدلاً من تكرارها للحجم الجديد - هل هناك أي أفكار حول كيفية إصلاح ذلك؟

هذا ما أفعله:

  • قم بتعيين خلفية العرض في viewDidLoad:

    frameView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"frame-repeat.png"]];

  • الحصول على بعض المعلومات من الخادم، وتحديث العرض، وتغيير حجم إطار العرض ليناسب المحتوى الجديد (يعني هذا عادةً جعل العرض أطول)

  • تم الآن تمديد صورة الخلفية، حتى لو قمت بتعيين لون الخلفية مرة أخرى باستخدام نفس الرمز بالضبط.

إذا لم أقم بتعيين الخلفية الأولية، وقمت بتعيينها فقط بعد استرداد البيانات من الخادم وتغيير حجم العرض، فسيبدو الأمر رائعًا - يتكرر، بدون تمديد.ومع ذلك، هذا يعني عدم وجود خلفية أثناء تحميل البيانات...تبدو قبيحة.

وقد أي شخص آخر واجهت هذا؟

شكرا على اي مساعدة!

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

المحلول

الجواب بسيط للغاية، فقط اتصل

[[self view] setNeedsDisplay];

في وحدة التحكم عند تغيير حجم الإطار (أو أينما قمت بذلك، خلاصة القول هي إرسال رسالة setNeedsDisplay إلى العرض بعد تغيير الإطار).إذا لم ينجح هذا - فحاول تعيين لون الخلفية.

وإذا لم ينجح ذلك، فقم بتنفيذ طريقة العرض المخصصة الخاصة بك، وفيها تجاوز الطريقة

- (void) drawRect:(CGRect) rect {
   CGRect myBounds = self.bounds;
   CGContextRef context = UIGraphicsGetCurrentContext();
   [[UIColor colorWithPatternImage:[UIImage imageNamed:@"frame-repeat.png.png"]]set];
   CGContextFillRect(context, myBounds);
}

وبعد ذلك، بعد تغيير الحجم، أرسل setNeedsDisplay إلى العرض الخاص بك.وهذا سوف يعمل بنسبة 100٪.

آمل أن يكون هذا مفيدًا يا باول

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top