2009-07-02 2 views
17

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

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

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

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

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

+0

Продолжительность затухания по умолчанию равна 0,25, если продолжительность не установлена ​​или установлена ​​на отрицательное число. похоже, я все равно не могу найти, чтобы не исчезать. – catsby

+0

Приветствую вас. Спасибо за ответ. Они исправляют проблему. Я имел хотя бы переопределение в подклассе, но надеялся, что был более элегантный способ, который не предполагал создание еще одного класса. Думаю, я сделаю CATiledLayer делегированием подкласса CATiledLAyer. Еще раз спасибо. –

+0

hi nico_h Можете ли вы, plesae сказать мне, как вы исправили свою проблему. Я также сталкиваюсь с той же проблемой. как вы достигли этого без использования подкласса? – CKT

ответ

31

Вы должны наследоваться CATiledLayer и вернуть fadeDuration 0, чтобы отключить нарастающий в:

@interface FastCATiledLayer : CATiledLayer 
@end 

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

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

+0

Обязательно замените 'fastDuration' на' fadeDuration' в коде. – lucius

+0

Исправлено, спасибо! – esad

+0

Проблема «не завершения», похоже, исчезла, когда я установил fadeDuration в 0. –

3

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

Смежные вопросы