UIBezierPath:appendPath方法丢失有关每个单一路径的信息

时间:2011-09-05 18:45:17

标签: objective-c xcode drawrect uibezierpath

问题是这个......

我创建了一个扩展名为PathExtended的UIBezierClass的类,其中我添加了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)

编辑:

PathExtended .h

@interface PathExtended : UIBezierPath {

NSString* ID;
}

@property (nonatomic, readwrite) NSString* ID;

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

1 个答案:

答案 0 :(得分:1)

想象一下,如果你创建了一个NSDecimalNumber的子类,将其称为MyImaginaryNumber会发生什么,这样你的子类就会存储一个虚构的组件。如果您尝试调用-decimalNumberByAdding:之类的方法会发生什么?你真的不希望NSDecimalNumber的那个方法的实现把你想象中的部分包含在结果数中,对吗? NSDecimalNumber显然对虚部没有任何了解,所以不能期望做正确的事。

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