2

我正在尝试创建一个子类对象,它的大小可以在我声明它时确定。例如,在“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 中创建对象的?

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

4

1 回答 1

1

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

在您C4Workspace.m的文件中,您需要导入头文件,然后您就可以在文件中的任何位置创建您的对象之一。您需要先调用alloc,然后再调用您initWithNumber的才能创建对象。你必须打电话setup才能让它出现在屏幕上,因为这是你提供所有代码的地方。

查看C4:向“self”以外的对象添加平移以进行相关讨论。

圈子.h

#import "C4Shape.h"

@interface Circle : C4Shape

- (id) initWithNumber: (int) n;

@end

圆.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
于 2013-10-14T22:07:20.093 回答