问题是...

我创建了一个扩展了名为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 财产。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top