2009-07-02 3 views
17

मैं एक आईफोन एप्लिकेशन पर काम कर रहा हूं जो टाइल वाले मानचित्र प्रदर्शित करता है। मैं वर्तमान में एक UIScrollView में एक CATiledLayer उपयोग कर रहा हूँ: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 के डिफ़ॉल्ट व्यवहार से नाराज हूं टाइल खींचा जाने के बाद fadein करने के लिए। इसके अलावा, कभी-कभी फेडेन पूरा नहीं होता है (यह 90 या 9 5% अस्पष्टता पर बंद हो जाता है)।

मैं कैसे बदल सकता हूं या (अधिमानतः) फेडेन एनीमेशन को हटा सकता हूं?

मैं कोई लाभ नहीं हुआ, मेरे CATiledLayer उदाहरण के speed और duration गुणों के साथ खेला। मैं tiledLayer पर कोई एनीमेशन सेट नहीं है। [tiledLayer removeAllAnimation] या तो कुछ भी नहीं बदलता है।

किसी भी पॉइंटर्स के लिए धन्यवाद।

+0

कोई अवधि निर्धारित नहीं है या ऋणात्मक संख्या पर सेट होने पर फीड अवधि 0.25 तक डिफ़ॉल्ट हो जाती है। वैसे भी ऐसा प्रतीत नहीं होता है कि मैं * फीका * नहीं ढूंढ सकता। – catsby

+0

हाय सबको। आपके उत्तरों के लिए धन्यवाद। वे समस्या को ठीक करते हैं। मैंने उप-वर्ग में ओवरराइड करने के बावजूद, लेकिन उम्मीद की थी कि एक और शानदार तरीका था जिसमें अभी तक एक और वर्ग बनाने में शामिल नहीं था। मुझे लगता है कि मैं CATiledLayer प्रतिनिधि को CATiledLAyer subclass बना देगा। एक बार फिर धन्यवाद। –

+0

hi nico_h क्या आप मुझे बता सकते हैं कि आपने अपनी समस्या को कैसे ठीक किया है। मुझे भी एक ही समस्या का सामना करना पड़ रहा है। सबक्लास का उपयोग किये बिना आपने इसे कैसे हासिल किया? – CKT

उत्तर

31

आप CATiledLayer उपवर्ग और 0 से fadeDuration लौट निष्क्रिय करने के लिए फीका-इन करना चाहिए:

@interface FastCATiledLayer : CATiledLayer 
@end 

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

मैं भी समस्या फीका के साथ एनीमेशन में पूरा नहीं किया था, क्या मदद की दृश्य की पृष्ठभूमि का रंग सेट करने के लिए था [UIColor clearColor]

+0

कोड में 'fadeDuration' के साथ 'fastDuration' को प्रतिस्थापित करना सुनिश्चित करें। – lucius

+0

सही, धन्यवाद! – esad

+0

जब मैं फीड अवधि 0 पर सेट करता हूं तो "पूर्ण नहीं होने" समस्या दूर दिखाई देती है। –

3

परत पर +fadeDuration एक्सेसर को उपclassing और ओवरराइड करने का प्रयास करें।