2010-11-09 10 views
11

ग्रीटिंग्स,xcode दृश्य से कुछ सबव्यूव्यूज़ को हटाकर

मैं एक नोब हूं और मैं कुछ दिनों से इस के माध्यम से काम करने की कोशिश कर रहा हूं।

मैं UItouch के माध्यम से एक दृश्य में छवियों को जोड़ रहा हूं। दृश्य में एक पृष्ठभूमि है जिसमें से शीर्ष छवियां जोड़ती हैं। पृष्ठभूमि की UIImage से छुटकारा पाने के बिना, मैं सबव्यू से जो छवियां जोड़ रहा हूं, मैं उन्हें कैसे साफ़ कर सकता हूं। किसी भी मदद का बहुत स्वागत है। अग्रिम में धन्यवाद।

यहाँ कोड है:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *) event { 
NSUInteger numTaps = [[touches anyObject] tapCount]; 

if (numTaps==2) { 
    imageCounter.text [email protected]"two taps registered";  

//__ remove images 
    UIView* subview; 
    while ((subview = [[self.view subviews] lastObject]) != nil) 
     [subview removeFromSuperview]; 

    return; 

}else { 

    UITouch *touch = [touches anyObject]; 
    CGPoint touchPoint = [touch locationInView:self.view]; 
    CGRect myImageRect = CGRectMake((touchPoint.x -40), (touchPoint.y -45), 80.0f, 90.0f); 
    UIImageView *myImage = [[UIImageView alloc] initWithFrame:myImageRect]; 

    [myImage setImage:[UIImage imageNamed:@"pg6_dog_button.png"]]; 
    myImage.opaque = YES; // explicitly opaque for performance 


    [self.view addSubview:myImage]; 
    [myImage release]; 

    [imagesArray addObject:myImage]; 

    NSNumber *arrayCount =[self.view.subviews count]; 
    viewArrayCount.text =[NSString stringWithFormat:@"%d",arrayCount]; 
    imageCount=imageCount++; 
    imageCounter.text =[NSString stringWithFormat:@"%d",imageCount]; 

} 

}

उत्तर

28

आप की जरूरत क्या पृष्ठभूमि UIImageView से UIImageView वस्तुओं जोड़ा अलग करने का एक तरीका है। ऐसा करने के दो तरीके हैं जिन्हें मैं सोच सकता हूं।

दृष्टिकोण 1: असाइन UIImageView एक विशेष टैग मूल्य

प्रत्येक UIView वस्तु एक tag संपत्ति जो केवल कि उस दृश्य की पहचान के लिए इस्तेमाल किया जा सकता एक पूर्णांक मूल्य है वस्तुओं गयी। तब दृश्य जोड़े गए दूर करने के लिए

myImage.tag = 7; 

,, आप subviews के सभी के माध्यम से कदम सकता है और केवल 7 के एक टैग मान के साथ लोगों को दूर: आप 7 से इस तरह प्रत्येक जोड़ा देखने के टैग मान सेट कर सकते हैं:

for (UIView *subview in [self.view subviews]) { 
    if (subview.tag == 7) { 
     [subview removeFromSuperview]; 
    } 
} 

दृष्टिकोण 2: पृष्ठभूमि दृश्य

एक और दृष्टिकोण पृष्ठभूमि दृश्य के लिए एक संदर्भ रखने के लिए ताकि आप इसे दृश्य जोड़े गए से अलग कर सकते हैं याद रखें। पृष्ठभूमि UIImageView के लिए IBOutlet बनाएं और इसे इंटरफ़ेस बिल्डर में सामान्य तरीके से असाइन करें। फिर, सबव्यूव को हटाने से पहले, बस सुनिश्चित करें कि यह पृष्ठभूमि दृश्य नहीं है।

for (UIView *subview in [self.view subviews]) { 
    if (subview != self.backgroundImageView) { 
     [subview removeFromSuperview]; 
    } 
} 
+2

उत्तर 1 आम तौर पर सही है, लेकिन ध्यान दें कि आप का उपयोग कर खोज को सीमित कर सकता है कि [UIView viewWithTag: 7] और हर एक दृश्य के माध्यम से पुनरावृत्ति नहीं है। बेशक, यह आपको कुछ भी बचा नहीं सकता है, लेकिन – justin

+0

दोस्तों को आपके इनपुट के लिए बहुत कुछ धन्यवाद। मैं आज इन्हें आजमाउंगा। मैंने एक लंबा काम किया जो सबकुछ साफ़ होने के बाद पृष्ठभूमि को वापस जोड़ना था। बिल्कुल सुरुचिपूर्ण नहीं है लेकिन यह काम करता है .. –

+1

आपका कामकाज बहुत चालाक है, हालांकि यह आपके विचारों पर अधिक नियंत्रण की आवश्यकता होने पर बहुत अच्छा काम नहीं कर सकता है। यदि आप 'viewWithTag:' का उपयोग करने का प्रयास करते हैं, जैसा कि @justin द्वारा सुझाया गया है, ध्यान रखें कि यह केवल मेल खाने वाले टैग के साथ पहले दृश्य को वापस कर देगा। यह एक बहुत ही सुविधाजनक तरीका है जब केवल एक ऐसा दृश्य होता है। यदि आपके पास मिलान करने वाले टैग के साथ बहुत सारे विचार हैं, तो आप उन्हें ढूंढने के लिए पुनरावृत्ति समाप्त कर देंगे। अतिरिक्त युक्ति: दृश्यों का शून्य का डिफ़ॉल्ट टैग मान होता है, इसलिए पहचानने वाले टैग मान के रूप में शून्य का उपयोग करने से बचें। –

0

केवल एक ही कोड के कार्यात्मक लाइन में # 1 दृष्टिकोण के लिए एक और अधिक तेजी से कोड:

self.view.subviews.filter({$0.tag == 7}).forEach({$0.removeFromSuperview()}) 

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

  • कोई संबंधित समस्या नहीं^_^