【问题标题】:How to attribute parameters to a subclass in C4如何在C4中将参数归因于子类
【发布时间】:2013-10-14 20:26:27
【问题描述】:

我正在尝试创建一个子类对象,它的大小可以在我声明它时确定。例如,在“circle (int width, int height)”附近做一些事情,并在 C4WorkSpace 中,为定义圆的大小的两个数字赋予属性。如果我理解正确,您可以为此使用初始化程序,例如:

- (id) initWithNumber: (int) n {
    self = [super init]; ❶ ❷
    if (self) {
        self->_number = n; ❸
    }
    return self; ❹
}

...但是我不太明白如何使用它以及放置它的位置。

这是我正在使用的代码。我在椭圆的参数中插入了“大小”,只是为了说明我想要做什么。 我的 circle.h 文件:

#import "C4Shape.h"

@interface circle : C4Shape

@end

还有circle.m一个:

#import "circle.h"

@implementation circle

-(void) setup
{
    [self addGesture:PAN name:@"pan" action:@"move:"];
    [self addGesture:TAP name:@"tap" action:@"changeColour"];
    [self ellipse:CGRectMake(0, 0, size, size)];
    [self setFillColor:[UIColor blackColor]];
    [self setStrokeColor:[UIColor blackColor]];
}

-(void) changeColour
{
    self.fillColor = [UIColor colorWithRed:[C4Math randomInt: 100]/100.0f green:[C4Math randomInt: 100]/100.0f blue:[C4Math randomInt: 100]/100.0f alpha:1.0f];
}

@end

在这种情况下,如何在 C4 中将变量归因于子类的最佳方式是什么?如果可能,您能否解释一下我是如何在 C4WorkSpace.m 中创建对象的?

感谢您的关注。如果我不清楚,对不起。

【问题讨论】:

    标签: class variables object attributes c4


    【解决方案1】:

    你可以这样做。您必须将初始化方法声明到头文件中才能让其他文件看到它。您需要创建一个名为size 的实例变量并将其设置为您的号码。或者,您可以使用property。您在 Circlce.m 文件中提供定义。我已将 self->size 更改为 size,因为它是您类中的一个实例变量。

    在您的C4Workspace.m 中,您需要导入头文件,然后您就可以在文件的任何位置创建您的对象之一。您需要先调用alloc,然后再调用initWithNumber 才能创建对象。您必须致电 setup 才能使其显示在屏幕上,因为您已在此处提供了所有代码。

    查看C4: Add panning to an object other than "self" 进行相关讨论。

    Circle.h

    #import "C4Shape.h"
    
    @interface Circle : C4Shape
    
    - (id) initWithNumber: (int) n;
    
    @end
    

    Circle.m

    #import "Circle.h"
    
    @implementation Circle
    {
         int size;
    }
    
    - (id) initWithNumber: (int) n {
        self = [super init];
        if (self) {
            size = n;
        }
        return self;
    }
    
    -(void) setup
    {
        [self addGesture:PAN name:@"pan" action:@"move:"];
        [self addGesture:TAP name:@"tap" action:@"changeColour"];
        [self ellipse:CGRectMake(0, 0, size, size)];
        [self setFillColor:[UIColor blackColor]];
        [self setStrokeColor:[UIColor blackColor]];
    }
    
    -(void) changeColour
    {
        self.fillColor = [UIColor colorWithRed:[C4Math randomInt: 100]/100.0f green:[C4Math randomInt: 100]/100.0f blue:[C4Math randomInt: 100]/100.0f alpha:1.0f];
    }
    
    @end
    

    C4Workspace.m

    #import "C4Shape.h"
    
    #import "C4WorkSpace.h"
    #import "Circle.h"
    
    @implementation C4WorkSpace
    {
        Circle * c;
    }
    
    -(void)setup
    {
        c = [[Circle alloc] initWithNumber:100];
        [c setup];
    
        [self.canvas addSubview:c];
    }
    
    @end
    

    【讨论】:

    • 非常感谢你,亚当!我现在了解初始化程序!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多