uibezierpath:附录方法失去了有关每条路径的信息
-
26-10-2019 - |
题
问题是...
我创建了一个扩展了名为Pathextended的UibezierClass的类,其中添加了NSString ID。
那么,我有一系列的路径。在我写的绘制方法中:
p = [[PathExtended alloc] init];
for (int i=0; i<[arrayOfPaths count]; i++) {
[p appendPath:[arrayOfPaths objectAtIndex:i]];
[p closePath];
}
[p applyTransform:CGAffineTransformMake(a, b, c, d, e, f)];
[p fill];
现在,如果我在接触端方法中测试:
if ([p containsPoint:pointTouched]) {
NSLog(@"There is!");
}
没关系!!!相反,如果我测试:
if ([p containsPoint:pointTouched]) {
NSLog(@"ID= %@", p.ID);
}
日志是空白的!
我可以理解为什么会发生这种情况,但是我不明白解决问题。我认为附录Path会创建一个独特的路径,因此,丢失了每个单个路径信息,例如ID。我还认为,如果我在不使用附录路线方法的情况下绘制每条路径,我可以解决问题,但是...我不知道……好像我正在遵循错误的方式。
任何想法???对不起,我的英语(我是意大利语:P)
编辑:
Pathextended .h
@interface PathExtended : UIBezierPath {
NSString* ID;
}
@property (nonatomic, readwrite) NSString* ID;
-(id) initwithID:(NSString*) _ID;
解决方案
想象一下,如果您创建了NSDecimalnumber的子类,将会发生什么,称其为myimaginarynumber,使您的子类存储一个虚构的组件。如果您尝试调用类似的方法会发生什么 -decimalNumberByAdding:
?您不会真正期望NSDECIMALNUMBER对该方法的实现将您的虚构部分包括在结果数中,对吗? NSDECIMALNUMBER显然对虚构部分一无所知,因此不能期望做正确的事情。
如果你想 -appendPath:
要与您的phatexted对象一起工作,您需要覆盖 -appendPath:
通过实现将额外信息保留在Pathexted中。当然,如果有用,您仍然可以从自己的内部调用UibezierPath的实现。例如,如果您的ID是可以组合的,则可能会做类似的事情:
-(PathExtended*)appendPath:(PathExtended*)path
{
PathID newID = [self composeID:path.ID];
PathExtended *newPath = [PathExtended pathWithBezierPath:[super appendPath:path] ID:newID];
return newPath;
}
我不确定为什么您的日志消息根本没有打印,如果发生了什么事,但这很可能是由于Uibezierpath没有 ID
财产。
不隶属于 StackOverflow