2009-07-02 7 views
17

Estoy trabajando en una aplicación de iPhone que muestra mapas en mosaico. Actualmente estoy usando un CATiledLayer en un UIScrollView:Cómo cambiar iphone CATiledLayer fadeDuration?

 MyTiledDelegate *delegate=[[MyTiledDelegate alloc] initWithMapLayer:map]; 
    tileLayer = [CATiledLayer layer]; 
    tileLayer.delegate = delegate; 
    [scrollView.layer addSublayer:tileLayer]; 
    [tileLayer setNeedsDisplay]; 

que escribí y puse mi propio delegado que implementa el método de capa de drenaje, así:

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx{ 
    CGRect rect =CGContextGetClipBoundingBox(ctx); 
    CGFloat x = fabs(round(rect.origin.x/tileSize)); 
    CGFloat y = fabs(round(rect.origin.y/tileSize)); 

    Tile *tile = [map getTileForMapZoom:z x:x y:y]; 
    CGImageRef img=[tile getRealImage]; 
    CGContextDrawImage(
     ctx, 
     CGRectMake(tile.x*tileSize,tile.y*tileSize, tileSize,tileSize) , 
     img); 
    }//edited for brevity 

estoy molesto por el comportamiento por defecto de la CAtiledLayer para desvanecerse después de que se dibuja la ficha. Además, a veces el fadein no está completo (se detiene a 90 o 95% de opacidad).

¿Cómo puedo cambiar o (preferiblemente) eliminar la animación de fadein?

He jugado con las propiedades speed y duration de mi instancia CATiledLayer, pero no he tenido éxito. No configuro ninguna animación en TiledLayer. el [tiledLayer removeAllAnimation] no cambia nada tampoco.

Gracias por cualquier apuntador.

+0

la duración del fundido se establece por defecto en 0.25 si no se establece ninguna duración o si se establece en un número negativo. no parece haber de todos modos que pueda encontrar * no * desvanecerse. – catsby

+0

Hola a todos. Gracias por sus respuestas. Ellos arreglan el problema. Pensé en sobrescribir en una subclase, pero esperaba que hubiera una manera más elegante que no implique crear otra clase. Supongo que haré que la subclase delegada CATiledLayer sea CATiledLAyer. Gracias de nuevo. –

+0

hola nico_h puede decirme cómo solucionó su problema. también estoy enfrentando el mismo problema. ¿Cómo lo lograste sin usar la subclase? – CKT

Respuesta

31

Debe subclase el CATiledLayer y fadeDuration regresar de 0 a desactivar fundido de entrada:

@interface FastCATiledLayer : CATiledLayer 
@end 

@implementation FastCATiledLayer 
+(CFTimeInterval)fadeDuration { 
    return 0.0; 
} 
@end 

también tuve el problema con la aparición gradual de la animación de la no realización, lo que ayudó fue para establecer el color de fondo de la vista a [UIColor clearColor]

+0

Asegúrese de reemplazar 'fastDuration' con' fadeDuration' en el código. – lucius

+0

Corregido, gracias! – esad

+0

El problema de "no finalización" parece desaparecer cuando configuro fadeDuration en 0. –

3

Intente subclasificar y anular el acceso +fadeDuration en la capa.

Cuestiones relacionadas