Pregunta

El problema es este ...

Creé una clase que extiende UbezierClass llamada PathExtended, en la que agregué NSString ID;

Tengo, entonces, una matriz de Pathextended. En el método de dibujo escribí:

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

Ahora, si pruebo en el método Touchend:

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

¡¡¡Está bien!!! En cambio, si pruebo:

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

¡El registro está en blanco!

Puedo entender por qué sucede, pero no puedo entender cómo resolver el problema. Pensé que AppendPath crea una ruta única, por lo que se pierde cada información de ruta, como ID. También pensé que, si dibujo cada ruta sin usar el método AppendPath, puedo resolver el problema, pero ... no sé ... parece que estoy siguiendo el camino equivocado.

¿¿¿Alguna idea??? Perdón por mi inglés (soy italiano: P)

EDITAR:

Pathextended .h

@interface PathExtended : UIBezierPath {

NSString* ID;
}

@property (nonatomic, readwrite) NSString* ID;

-(id) initwithID:(NSString*) _ID;
¿Fue útil?

Solución

Imagine lo que sucedería si creara una subclase de NSDecimalNumber, llámelo MyImaginaryNumber, de modo que su subclase almacenara un componente imaginario. ¿Qué pasaría si intentara llamar a un método como -decimalNumberByAdding:? Realmente no esperaría que la implementación de NSDecimalNumber de ese método incluya su parte imaginaria en el número resultante, ¿verdad? NSDecimalNumber obviamente no sabe nada sobre la parte imaginaria, por lo que no se puede esperar que haga lo correcto.

Si tu quieres -appendPath: Para trabajar con sus objetos PathExtended, deberá anular -appendPath: con una implementación que preserva la información adicional en PathExtended. Todavía puede llamar a la implementación de Ubezierpath desde dentro de su cuenta si eso es útil, por supuesto. Por ejemplo, si sus identificaciones son compuestas, puede hacer algo como:

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

No estoy seguro de por qué su mensaje de registro no imprimió en absoluto, si eso es lo que sucedió, pero es probable que se deba a Ubezierpath no tener un ID propiedad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top