2009-07-02 6 views
17

タイルマップを表示するiphoneアプリケーションで作業しています。私は現在、UIScrollViewの中CATiledLayerを使用しています:iphone CATiledLayer fadeDurationを変更するには?

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

私が書いたので、などの描画層のメソッドを実装し、私自身のデリゲートを設定:私はCAtiledLayerのデフォルトの動作に悩まさ午前

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

をタイルを描いた後にフェードインする。また、フェーディンが完全でない場合もあります(90%または95%の不透明度で停止します)。

どのように変更できますか(できれば)フェードインアニメーションを削除できますか?

私はCATiledLayerインスタンスのspeeddurationのプロパティを使用していましたが、役に立たないです。私はtiledLayerにアニメーションを設定しません。 [tiledLayer removeAllAnimation]は何も変更されません。

ありがとうございます。

+0

持続時間が設定されていないか、または負の数に設定されている場合、フェード持続時間のデフォルトは0.25になります。とにかく私が見つけることができないように思われない*フェードしない*。 – catsby

+0

皆さん。あなたの答えをありがとう。彼らは問題を解決します。私はサブクラスでオーバーライドしましたが、まだ別のクラスを作成することを伴わないよりエレガントな方法があることを望みました。私はCATiledLayerデリゲートをCATiledLAyerのサブクラスにすると思います。再度、感謝します。 –

+0

こんにちはnico_h あなたの問題をどのように修正したか教えてください。私も同じ問題に直面しています。あなたはサブクラスを使わずにこれをどのように達成しましたか? – CKT

答えて

31

あなたはCATiledLayerのサブクラスを作成し、フェードインを無効にするには0のfadeDurationを返す必要があります:私もアニメーションでフェードを完了していない問題を抱えていた

@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アクセサーをサブクラス化してオーバーライドしてみてください。

関連する問題