我创建了一个名为Lines的子类,它继承自C4Shape。现在,它只是在调用类方法时创建一个随机行。
意图是每一个新行都从前一行的pointB
开始(即终点),以便创建一个连续的行树。最终,我将从同一个终点产生多条线,旧的线条消失,等等。这是我到目前为止的代码:
+(Lines *)createLineFromPoint:(CGPoint)startPoint {
CGPoint endPoint = CGPointMake([C4Math randomIntBetweenA:(startPoint.x-50) andB:(startPoint.x+50)],
[C4Math randomIntBetweenA:(startPoint.y-50) andB:(startPoint.y+50)]);
CGPoint linePoints[2] = {startPoint, endPoint};
Lines *newLine = [Lines new];
[newLine line:linePoints]; //This should make newLine a line type, should it not?
newLine.lineWidth = 3.0f;
return newLine;
}
-(void) setup {
[self performSelector:@selector(continueMakingLinesWithLine) withObject:(self) afterDelay:(3.0)];
}
-(void) continueMakingLinesWithLine {
[self.arrayOfLines addObject:[Lines createLineFromPoint:self.pointB]];
}
据我所知,它应该在C4WorkSpace中第一次调用continueMakingLinesWithLine
后循环;第一个调用使用随机生成的CGPoint进行实例化。
但是,我很难正确访问在上次调用方法期间设置的pointB
属性。
我收到一个错误,告诉我这是因为C4Shape *(Lines *)不是类型行或弧。
但是,实例方法应该是那种类型,不应该吗?
答案 0 :(得分:1)
我不确定你的实际错误意味着什么。你的逻辑非常正确。
首先,在您的代码中,您有以下内容:
[newLine line:linePoints]; //This should make newLine a line type, should it not?
答案是YES
,它就是!
我将您的代码复制到一个新项目中,并在创建时将每一行添加到画布中。跑了,虽然不是我预期的方式。 然而,这不是你的错。
您实际上在[shapeObj line:...]方法的实现中发现了一个小错误。
我将修复GitHub上的C4iOS项目中的错误,但是这不会出现在您的项目中,而是使用当前的安装程序。
你可以做以下两件事之一:
1)从你的行子类返回C4Shape
并使用[C4Shape line:linePoints]
2)将以下内容添加到line 400
的{{1}}:
C4Shape.m
对于if(CGRectEqualToRect(CGRectZero, self.frame)) { self.frame =
lineRect; }
,您的方法应如下所示:
1)
对于+(Lines *)createLineFromPoint:(CGPoint)startPoint {
CGPoint endPoint = CGPointMake([C4Math randomIntBetweenA:.. andB:..],
[C4Math randomIntBetweenA:.. andB:..]);
CGPoint linePoints[2] = {startPoint, endPoint};
C4Shape *newLine = [C4Shape line:linePoints];
newLine.lineWidth = 3.0f;
return (Lines *)newLine;
}
,2)
中方法的结尾应如下所示:
C4Shape.m
如果您执行-(void)_line:(NSArray *)pointArray {
//Default implementation
//..
//..
newBounds.origin = CGPointZero;
if(CGRectEqualToRect(CGRectZero, self.frame)) { self.frame = lineRect; }
CGPathRelease(newPath);
_initialized = YES;
}
,则无需修复当前的2)
方法。
我收紧了您在上面发布的代码,如下所示:
+(Lines *)
在@interface C4WorkSpace ()
@property NSMutableArray *arrayOfLines;
@end
@implementation C4WorkSpace
-(void) setup {
self.arrayOfLines = [@[] mutableCopy];
Lines *newLine = [Lines createLineFromPoint:self.canvas.center];
[self.arrayOfLines addObject:newLine];
[self.canvas addShape:newLine];
[self continueMakingLinesWithLine];
}
-(void) continueMakingLinesWithLine {
CGPoint p = ((Lines *)[self.arrayOfLines lastObject]).pointB;
Lines *newLine = [Lines createLineFromPoint:p];
[self.arrayOfLines addObject:newLine];
[self.canvas addShape:newLine];
[self runMethod:@"continueMakingLinesWithLine" afterDelay:1.0f];
}
@end
中,我创建第一行并将其添加到画布和数组中。然后,我让setup
方法找到前一行,构建一个新行,然后再次调用自己。