2012-04-28 6 views
11

मैं UIView को एक और UIView के साथ-साथ पहले व्यक्ति पर प्रस्तुत करने का एक तरीका सोच रहा हूं। तो मेरे पास इसके मुख्य UIView के साथ सीमा है, और UIView भी कुछ अन्य UIView में प्रस्तुत करता है।आईओएस आईफोन क्या यूआईवीव को क्लोन करना संभव है और इसे अपने आप को दो UIViews में आकर्षित करना है?

क्या यह संभव है? क्या इसे व्यापक परत संचालन की आवश्यकता है?

+0

एक नया उदाहरण बनाने के अलावा खुद को किसी अन्य तरीके से प्रस्तुत करें? यह सब के बाद, एक वस्तु है। – jmstone617

उत्तर

14

पता नहीं कि आपका असली इरादा क्या है, लेकिन यह दो बार दृश्य आकर्षित करेगा, उपयोगकर्ता इंटरैक्शन आदि दूसरे दृश्य पर काम नहीं करेगा। यह समाधान विभिन्न फ्रेम आकारों का ख्याल नहीं रखता है। देखें की

हैडर क्या आप

#import "SrcView.h" 
#import "CloneView.h" 

@implementation SrcView 
@synthesize cloneView; 

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx{ 
    [cloneView setNeedsDisplay]; 
} 

- (UIView *)cloneView { 
    if (!cloneView) { 
     cloneView = [[CloneView alloc] initWithView:self]; 
    } 
    return cloneView; 
} 

@end 

@implementation CloneView 
@synthesize srcView; 

- (id)initWithView:(UIView *)src { 
    self = [super initWithFrame:src.frame]; 
    if (self) { 
     srcView = src; 
    } 
    return self; 
} 

- (void)drawRect:(CGRect)rect 
{ 
    [srcView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
} 

@end 

क्लोन अब तुम सिर्फ cloneView कॉल कर सकते हैं और इसे कहीं आप चाहते हैं जोड़ना चाहते हैं दृश्य की

@interface SrcView : UIView 
@property(nonatomic, readonly, strong) UIView *cloneView; 
@end 

@interface CloneView : UIView 
@property(nonatomic, weak) UIView *srcView; 
- (id)initWithView:(UIView *)src; 
@end 

कार्यान्वयन क्लोन करने के लिए चाहते हैं।

+0

की प्रतिलिपि नहीं लेते हैं यह बहुत अच्छा काम करता है .. बहुत बढ़िया उदाहरण .. बहुत धन्यवाद –

5

यह स्टैक ओवरव्लो पर यहां एक सवाल पूछा गया प्रतीत होता है। उदाहरण के लिए:

iphone, ipad Duplicate UIView - Cloned View

Copying the drawn contents of one UIView to another

UIView duplicate

Duplicate, clone or copy UIView

लेकिन अगर यह मुझे इस कर रहे थे, मेरा पहला दृष्टिकोण UIView मैं चाहता हूँ करने के लिए एक संभाल पाने के लिए किया जाएगा प्रतिलिपि बनाएँ, फिर इसके सभी subviews को दोबारा दोहराएं और फिर कॉपी & उन्हें UIView पर सबव्यू के रूप में जोड़ें, मैं मुख्य UIView को कॉपी करना चाहता हूं।

मैं कल्पना नहीं कर सकता कि इसके साथ बहुत अधिक परत संचालन चल रहा है, लेकिन आपको यह पता लगाने की आवश्यकता होगी कि प्रोग्रामलेटिक रूप से आउटलेट और/या कार्रवाइयों को फिर से स्थापित कैसे किया जाए।

+2

जब आप उन्हें सबव्यूव के रूप में जोड़ते हैं, तो आप अनिवार्य रूप से उन वस्तुओं को किसी अन्य मूल दृश्य के अंतर्गत ले जा रहे हैं, –

0

UIView का एक और उदाहरण बनाएं जिसे आप "क्लोन" करना चाहते हैं और इसे किसी अन्य दृश्य में उप-दृश्य के रूप में जोड़ें। आप वास्तव में UIView ऑब्जेक्ट क्लोन नहीं करते हैं, तो आप बस इसका एक और उदाहरण बनाते हैं।

2

कोई दृश्य क्लोन करने के लिए कोई आसान तरीका नहीं है और फिर कोड के एक पंक्ति से दो दृश्य अपडेट करने का कोई आसान तरीका नहीं है। क्योंकि उनके अंतर्निहित कैलियर अलग हैं। उपयोग UIView की विधि:

- (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates 

यह एक दृश्य आकर्षित करने के लिए सबसे तेज़ तरीका है लेकिन एक UIView डुप्लिकेट करने के लिए, यहाँ एक नई विधि का उपयोग कर सकते है। आईओएस 7 में उपलब्ध।

संबंधित मुद्दे