0

问题是这个……

我创建了一个扩展 UIBezierClass 的类,名为 PathExtended,我在其中添加了 NSString ID;

然后,我有一个 PathExtended 数组。在drawrect方法中我写道:

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];

现在,如果我在 touchend 方法中进行测试:

if ([p containsPoint:pointTouched]) {
            NSLog(@"There is!");
        }

没关系!!!相反,如果我测试:

if ([p containsPoint:pointTouched]) {
            NSLog(@"ID= %@", p.ID);
        }

日志是空白的!!

我可以理解它为什么会发生,但是,我不明白如何解决问题。我认为 appendPath 创建了一个唯一的路径,因此,每个路径信息(如 ID)都会丢失。我还认为,如果我在不使用 appendPath 方法的情况下绘制每条路径,我可以解决问题,但是......我不知道......似乎我走错了路。

任何的想法???对不起我的英语(我是意大利人:P)

编辑:

路径扩展.h

@interface PathExtended : UIBezierPath {

NSString* ID;
}

@property (nonatomic, readwrite) NSString* ID;

-(id) initwithID:(NSString*) _ID;
4

1 回答 1

1

想象一下,如果你创建了一个 NSDecimalNumber 的子类,称之为 MyImaginaryNumber,你的子类存储了一个虚构的组件,会发生什么。如果您尝试调用类似的方法会发生什么-decimalNumberByAdding:?您不会真的期望 NSDecimalNumber 对该方法的实现将您的虚部包含在结果数字中,对吗?NSDecimalNumber 显然对虚部一无所知,因此不能指望它做正确的事情。

如果您想-appendPath:使用您的 PathExtended 对象,您需要-appendPath:使用在 PathExtended 中保留额外信息的实现来覆盖。当然,如果有用的话,你仍然可以从你自己的内部调用 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属性。

于 2011-09-06T13:41:43.650 回答