Pregunta

Estoy tratando de poner en práctica alguna línea muy simple dibujo de animación para mi aplicación para el iPhone. Me gustaría dibujar un rectángulo en mi punto de vista después de un retraso. Estoy usando performSelector el funcionamiento de mi método de dibujo.

-(void) drawRowAndColumn: (id) rowAndColumn
{
    int rc = [rowAndColumn intValue];
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 2.0);
    CGContextSetStrokeColorWithColor(context, currentColor.CGColor);
    CGRect rect = CGRectMake(rc * 100, 100, 100, 100);
    CGContextAddRect(context, rect);
    CGContextDrawPath(context, kCGPathFillStroke);

}

que se invoca entonces a través de:

int col = 10;
[self performSelector:@selector(drawRowAndColumn:) 
           withObject:[NSNumber numberWithInt:col]
           afterDelay:0.2];

Pero parece que cuando el mensaje sea enviado drawRowAndColumn:, ya no tiene acceso a una CGContextRef válida, ya que tengo errores tales como:

<Error>: CGContextAddRect: invalid context

Si se sustituye la performSelector con una llamada directa a drawRowAndColumn, que funciona bien. Así que mi primera idea era pasar también en el CGContextRef a través de la performSelector, pero me parece que no puede encontrar la manera de pasar varios argumentos al mismo tiempo (que es otra buena pregunta.)

¿Qué pasa con el código de seguridad?

¿Fue útil?

Solución

No se puede llamar en cualquier momento como ese. Es necesario poner en práctica el método de drawRect: UIView y poner su código de dibujo en ese país. Para obtener drawRect: al fuego es necesario dejar cacao sabe que la visión tiene que ser dibujado. Para que pueda llamar setNeedsDisplay o setNeedsDisplayInRect:.

traducir directamente su intento de esta manera que se dice setNeedsDisplay usando performSelector: withObject: afterDelay - pero eso no es probablemente una buena manera de hacer la animación

.

Depende de lo que está realmente tratando de hacer - pero usted podría considerar, por ejemplo, poner su código de dibujo en drawRect como he sugerido, pero el comienzo de la vista oculto. A continuación, puede llamar setHidden: no usar performSelector para hacer que aparece después de un retraso - o sin problemas podría animar en iniciando no oculta, pero con un alfa de 0, a continuación, cambiar alfa a 1 dentro de un bloque de animación UIView (hay un montón acerca esto en los documentos).

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