Подтвердить что ты не робот

Как изменить iphoneCiledLayer fadeDuration?

Я работаю над приложением iphone, которое отображает чередующиеся карты. В настоящее время я использую CATiledLayer в UIScrollView:

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

Я написал и установил свой собственный делегат, который реализует метод рисования слоя следующим образом:

- (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 для fadein после рисования плитки. Кроме того, иногда фадиин не является полным (он останавливается при непрозрачности 90 или 95%).

Как я могу изменить или (желательно) удалить анимацию fadein?

Я играл со свойствами speed и duration моего экземпляра CATiledLayer, но безрезультатно. Я не устанавливаю анимацию на tiledLayer. [tiledLayer removeAllAnimation] тоже ничего не меняет.

Спасибо за любые указатели.

4b9b3361

Ответ 1

Вы должны подклассифицировать CATiledLayer и вернуть fadeDuration из 0, чтобы отключить fade-in:

@interface FastCATiledLayer : CATiledLayer
@end

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

У меня также возникла проблема с постепенным исчезновением в анимации, что помогло установить фоновый цвет представления на [UIColor clearColor]

Ответ 2

Попробуйте подклассифицировать и переопределить аксессуар +fadeDuration на уровне.

Ответ 3

Или в Swift 4:

class CAFastTiledLayer: CATiledLayer {
    class func fadeDuration() -> CFTimeInterval {
        return 0.0 
    }
}