如何更改iphone CATiledLayer fadeDuration?

nic*_*o_h 18 iphone core-animation objective-c

我正在开发一个显示平铺地图的iphone应用程序.我目前在UIScrollView中使用CATiledLayer:

     MyTiledDelegate *delegate=[[MyTiledDelegate alloc] initWithMapLayer:map];
     tileLayer = [CATiledLayer layer];
     tileLayer.delegate = delegate;
     [scrollView.layer addSublayer:tileLayer];
     [tileLayer setNeedsDisplay];   
Run Code Online (Sandbox Code Playgroud)

我编写并设置了自己的委托,它实现了绘图层方法,如下所示:

- (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
Run Code Online (Sandbox Code Playgroud)

在绘制图块后,我对CAtiledLayer的默认行为感到恼火.此外,有时fadein不完整(它停止在90%或95%不透明度).

我如何更改或(最好)删除fadein动画?

我打了speedduration我的CATiledLayer实例的属性,都无济于事.我没有在tilesLayer上设置任何动画.在[tiledLayer removeAllAnimation]没有任何改变任何东西.

谢谢你的任何指示.

esa*_*sad 32

您应该子类化CATiledLayer并返回0的fadeDuration以禁用淡入:

@interface FastCATiledLayer : CATiledLayer
@end

@implementation FastCATiledLayer
+(CFTimeInterval)fadeDuration {
  return 0.0;
}
@end
Run Code Online (Sandbox Code Playgroud)

我也遇到了动画淡入未完成的问题,有助于将视图的背景颜色设置为 [UIColor clearColor]