2009-07-02 11 views
17

Sto lavorando a un'applicazione per iPhone che visualizza mappe affiancate. Attualmente sto usando un CATiledLayer in un UIScrollView:Come cambiare iphone CATiledLayer fadeDuration?

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

ho scritto e impostato il mio proprio delegato che implementa il metodo a strati draw in questo modo:

- (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 

Io sono infastidito dal comportamento predefinito del CATiledLayer svanire dopo aver disegnato la tessera. Inoltre, a volte la fadein non è completa (si ferma a 90 o 95% di opacità).

Come posso modificare o (preferibilmente) rimuovere l'animazione di fadein?

Ho giocato con le proprietà speed e duration della mia istanza CATiledLayer, senza alcun risultato. Non ho impostato alcuna animazione su tiledLayer. lo [tiledLayer removeAllAnimation] non cambia nulla neanche.

Grazie per eventuali suggerimenti.

+0

la durata della dissolvenza è impostata su 0,25 se non è impostata alcuna durata o se è impostata su un numero negativo. non sembra che ci sia comunque che posso trovare * non * sbiadire. – catsby

+0

Ciao a tutti. Grazie per le tue risposte. Risolvono il problema. Avevo pensato di scavalcare in una sottoclasse, ma speravo che esistesse un modo più elegante che non implicasse la creazione di un'altra classe. Immagino che farò delegare CATiledLayer alla sottoclasse CATiledLAyer. Grazie ancora. –

+0

hi nico_h puoi dirmi come hai risolto il problema. Anch'io sto affrontando lo stesso problema. come hai ottenuto questo senza usare la sottoclasse? – CKT

risposta

31

Si dovrebbe sottoclasse il CATiledLayer e restituire fadeDuration da 0 a disabilitare fade-in:

@interface FastCATiledLayer : CATiledLayer 
@end 

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

Ho anche avuto il problema con fade in animazione non completato, ciò che ha contribuito è stato quello di impostare il colore del background vista a [UIColor clearColor]

+0

Assicuratevi di sostituire 'fastDuration' con' fadeDuration' nel codice. – lucius

+0

corretto, grazie! – esad

+0

Il problema di "non completamento" sembrava scomparire quando ho impostato il valore di fadeDuration su 0. –

3

Provare la sottoclasse e ignorare l'accessor +fadeDuration sul livello.

Problemi correlati