iphone - 如何更改 iphone CATiledLayer fadeDuration?

标签 iphone objective-c core-animation

我正在开发一个显示平铺 map 的 iPhone 应用程序。我目前在 UIScrollView 中使用 CATiledLayer :

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

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

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

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

我如何更改或(最好)删除淡入淡出动画?

我试过我的 CATiledLayer 实例的 speedduration 属性,但无济于事。我没有在 tiledLayer 上设置任何动画。 [tiledLayer removeAllAnimation] 也没有改变任何东西。

感谢您的指点。

最佳答案

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

@interface FastCATiledLayer : CATiledLayer
@end

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

我也遇到了动画淡入淡出没有完成的问题,将 View 的背景颜色设置为 [UIColor clearColor]

关于iphone - 如何更改 iphone CATiledLayer fadeDuration?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1073727/

相关文章:

iphone - iPhone 上 Mail.app 中的圆圈 - iOS 编程

ios - UICollectionView 未以编程方式加载

ios - 如何用另一个 UIView 的矩形切割 UIView 的顶角

iphone - 如何测试生产推送通知?

iphone - Xcode 3.2 的代码签名错误

ios - CLGeocoder:美国州名将以短代码形式出现

iphone - 在 Objective C block 中执行选择器

macos - CATextLayer 过早地被光栅化并且变得模糊

iphone - iPhone 上的大多数游戏都是用 OpenGL ES 完成的吗?

ios - 如何消除我的 CABasicAnimation 中的 "jump"?