سؤال

أحاول أن أفهم كيفية الحفاظ على القيم المستخدمة بواسطة DrawRect فريدة من نوعها عبر مثيلات صفي. الفئة المثال أدناه ترسم مثلث. الطريقة التي يتم إعدادها الآن إذا قمت بإنشاء حالتين من هذا باستخدام [[incloc] initWithFrame] حيث يكون الإطاران من أحجام مختلفة ستلاحظ أن كلا المثلثين يتم رسمهما بحجم المثيل الثاني للفئة. إذا كانت مثالك الأول صغيرًا من الثانية ، فسيتم قصها بواسطة المستقيم.

  1. إذا أعلنت tsize داخل السحب ، فستكون الأحجام مختلفة (صحيحة)
  2. إذا أعلنت tsize داخل atriangle.h و synthesize ، فستكون الأحجام مختلفة (صحيحة)
  3. يتم تشغيل طريقتان initWithFrame على التوالي ، ثم يتم تشغيل المسافرين ، من خلال قائمة انتظار احتياجات DevisPlay.

لذا فإن سؤالي هو ، بالضبط كيف يعمل النطاق فيما يتعلق بالسحب لأن أيا من البرامج التعليمية التي قرأتها أذكر هذا السلوك في أي شيء سوى أبرز المصطلحات. يقولون أن هناك سياقًا واحدًا فقط ، ويبدو ذلك مع هاتين الحالتين ، لكن لا يبدو أنهما يشاركون ذلك مع فصولي الأخرى. فاتني القارب على هذا. ما الذي يحدث على الأرض؟

#import "ATriangle.h"

@implementation ATriangle
UIColor *divColor;

CGFloat tSize;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        divColor = [UIColor colorWithWhite:1.0 alpha:0.5];
        self.tSize = (frame.size.width / 3);

    }
    return self;
}


// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{


    CGContextRef context     = UIGraphicsGetCurrentContext();

    CGContextSetFillColorWithColor(context, divColor.CGColor);

    CGContextMoveToPoint(context,    (rect.size.width / 2), 0);
    CGContextAddLineToPoint(context, (rect.size.width / 2)-tSize, tSize);
    CGContextMoveToPoint(context,    (rect.size.width / 2) , 0);
    CGContextAddLineToPoint(context, (rect.size.width / 2)+tSize, tSize);
    CGContextAddLineToPoint(context, (rect.size.width / 2)-tSize, tSize);

    CGContextFillPath(context);
}


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

المحلول

المشكلة مع divColor و tSize. لقد أعلنتهم كمتغيرات عالمية للملف ، وليس متغيرات المثيل. هذا يعني أن كل مثيل للفئة يشارك نفس النسخة من المتغيرات.

انت تريد هذا:

@implementation ATriangle {
    UIColor *divColor;
    CGFloat tSize;
}

سيؤدي ذلك إلى جعل المتغيرات المثيل الخاص المتغيرات بدلاً من ملفات الملفات.

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