Как изменить 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]
тоже ничего не меняет.
Спасибо за любые указатели.
Ответы
Ответ 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
}
}