2009-07-02 7 views
17

Ich arbeite an einer iPhone-Anwendung, die gekachelte Karten anzeigt. Ich bin derzeit ein CATiledLayer in einem UIScrollView mit:Wie ändere ich iPhone CATiledLayer fadeDuration?

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

schrieb ich und meine eigenen Delegierten festgelegt, die die Auslosung Schichtverfahren wie so implementiert:

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

Ich bin verärgert durch das Standardverhalten des CATiledLayer nach dem Zeichnen der Kachel verblassen. Manchmal ist die Überblendung nicht vollständig (bei einer Deckkraft von 90 oder 95%).

Wie kann ich die Fadein-Animation ändern oder (vorzugsweise) entfernen?

Ich spielte mit den speed und duration Eigenschaften meiner CATiledLayer-Instanz, vergeblich. Ich setze keine Animation auf dem tiledLayer. Die [tiledLayer removeAllAnimation] ändert auch nichts.

Danke für alle Hinweise.

+0

Fade Dauer standardmäßig auf 0,25, wenn keine Dauer eingestellt ist oder auf eine negative Zahl eingestellt ist. es scheint nicht zu sein, ich kann es nicht verblassen. – catsby

+0

Hallo zusammen. Danke für deine Antworten. Sie beheben das Problem. Ich hatte zwar Vorrang vor einer Unterklasse, aber ich hoffte, dass es einen eleganteren Weg gab, der nicht die Erstellung einer weiteren Klasse beinhaltete. Ich denke, ich werde die CATiledLayer-Delegate-Unterklasse zu CATiledLayer machen. Danke noch einmal. –

+0

hi nico_h können Sie mir sagen, wie Sie Ihr Problem behoben haben. Ich stehe auch vor demselben Problem. Wie hast du das erreicht ohne Subclass zu benutzen? – CKT

Antwort

31

Sie sollten die CATiledLayer Unterklasse und das Rück fadeDuration von 0 Fade-in deaktivieren:

@interface FastCATiledLayer : CATiledLayer 
@end 

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

Ich hatte auch das Problem mit verblasst in der Animation nicht abgeschlossen, was half, war die Hintergrundfarbe der Ansicht festlegen zu [UIColor clearColor]

+0

Stellen Sie sicher, dass "fastDuration" durch "fadeDuration" im Code ersetzt wird. – lucius

+0

Korrigiert, danke! – esad

+0

Das "nicht abgeschlossen" -Problem schien zu verschwinden, als ich fadeDuration auf 0 setzte. –

3

Versuchen Sie, die Unterklasse +fadeDuration auf der Ebene zu untergliedern und zu überschreiben.