2009-10-27 15 views
5

के लिए लाने के लिए LetSubviewToFront मुझे आश्चर्य है कि क्या अन्य परतों के शीर्ष पर परत लाने का कोई तरीका है। bringSubviewToFront की तरह कुछ UIView कक्षा के लिए करता है। मुझे लगता है कि यह CALayer की संपत्ति के साथ किया जा सकता है लेकिन इसका मतलब है कि मुझे सभी परतों के लिए zPosition जांचना होगा और फिर उचित मूल्य निर्धारित करना होगा।CALayer

अग्रिम धन्यवाद।

उत्तर

4

मुझे विश्वास है कि कोड (कि layer दिया अपने CALayer है)

[layer retain]; 
CALayer *superlayer = layer.superlayer; 
[layer removeFromSuperlayer]; 
[superlayer addLayer:layer]; 
[layer release]; 

एक राउंडअबाउट रास्ते में यद्यपि, तुम क्या चाहते हो जाएगा।

+0

के लिए बिल्कुल समान व्यवहार है धन्यवाद लूट। मुझे दो परतों के जेड-इंडेक्स को स्वैप करने के लिए – Dmytro

+0

की आवश्यकता है? – Raptor

1

इस श्रेणी में प्राप्त होगा कि तुम क्या बारे में बात कर रहे हैं ...

CALayer + Additions.h

#import <Foundation/Foundation.h> 
#import <QuartzCore/CALayer.h> 
@interface CALayer (Additions) 
- (void)moveToFront; 
@end 

CALayer + Additions.m

#import "CALayer+Additions.h" 
@implementation CALayer (Additions) 
- (void)moveToFront { 
    CALayer *superlayer = self.superlayer; 
    [self removeFromSuperlayer]; 
    [superlayer addSublayer:self]; 
} 
@end 

01 आपकी परियोजना के भीतर, और आपको एक नई विधि मिल जाएगी, moveToFront अब आपके CALayer उदाहरणों के लिए उपलब्ध है।

0

यदि आप प्रदर्शन के लिए CALayer का उपयोग कर रहे हैं तो आपको केवल UIImageView का उपयोग करने का प्रयास करना चाहिए। मेरे मामले में यह कुछ एफपीएस तेज हो गया। (शायद UIImage से CGImage रूपांतरण जो मुझे प्रत्येक छवि एट्रिब्यूशन में प्रदर्शन करने की आवश्यकता है)

3

यह और भी आसान है। यदि sublayerToBeMovedToFront परत आप जा रहे हैं और itsSuperLayer, है अच्छी तरह से, अपने superlayer, बस कहते हैं:

[itsSuperLayer addSublayer:sublayerToBeMovedToFront]; 

addSublayer कॉल एक साथ जहाँ भी यह भाई सूची में था से sublayerToBeMovedToFront unhooks और पिछले के रूप में यह rehooks (यानी , सबसे ऊपर स्थित, दृश्यमान "शीर्ष पर") sublayer। यह [aUIView addSubview:]