Question

Le problème est ...

I a créé une classe qui étend UIBezierClass appelé PathExtended, dans lequel i a ajouté NSString ID;

Je, puis, un tableau de PathExtended. Dans la méthode drawRect je l'ai écrit:

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

Maintenant, si le test i dans la méthode touchEnd:

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

Il est ok !!! Au lieu de cela, si le test i:

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

Log est vide !!

Je peux comprendre pourquoi cela arrive, mais je ne peux pas comprendre comment résoudre les problèmes. Je pensais que appendPath crée un chemin unique, donc, chaque information de chemin unique, comme ID, est perdu. Je pensais aussi que, si je dessine chaque chemin sans utiliser la méthode appendPath je peux résoudre le problème, mais ... je ne sais pas ... il semble que si je suis dans le mauvais sens.

Toute idée ??? Désolé pour mon anglais (je suis italien: P)

EDIT:

PathExtended .h

@interface PathExtended : UIBezierPath {

NSString* ID;
}

@property (nonatomic, readwrite) NSString* ID;

-(id) initwithID:(NSString*) _ID;
Était-ce utile?

La solution

Imaginez ce qui se passerait si vous avez créé une sous-classe de NSDecimalNumber, appelez MyImaginaryNumber, de sorte que votre sous-classe stockée une composante imaginaire. Que se passerait-il si vous avez essayé d'appeler une méthode comme -decimalNumberByAdding:? Vous ne penseriez pas vraiment la mise en œuvre de NSDecimalNumber de cette méthode pour inclure votre partie imaginaire que dans le nombre, vous? NSDecimalNumber ne sait évidemment rien sur la partie imaginaire, donc il ne peut pas être prévu de faire la bonne chose.

Si vous voulez -appendPath: à travailler avec vos objets PathExtended, vous devrez override -appendPath: avec une mise en œuvre qui préserve l'information supplémentaire dans PathExtended. Vous pouvez toujours appeler la mise en œuvre de UIBezierPath à l'intérieur de votre propre si c'est utile, bien sûr. Par exemple, si votre ID de sont composables, vous pourriez faire quelque chose comme:

-(PathExtended*)appendPath:(PathExtended*)path
{
    PathID newID = [self composeID:path.ID];
    PathExtended *newPath = [PathExtended pathWithBezierPath:[super appendPath:path] ID:newID];
    return newPath;
}

Je ne sais pas pourquoi votre message de journal n'a pas imprimer du tout, si c'est ce qui est arrivé, mais il est probablement dû à UIBezierPath ne pas avoir une propriété ID.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top