2012-05-28 16 views
33

एक एनीमेशन में से सभी sublayers हटाने के साथ मैं एक देखने के लिए sublayers का एक बहुत कहा,:एक दृश्य

[self.view.layer addSublayer:layer1]; 
[self.view.layer addSublayer:layer2]; 

....

मैं सभी sublayers निकालना चाहते हैं एक कार्रवाई के साथ। मैं पहले से ही एक समान प्रश्न के इस सुझाव के साथ करने की कोशिश की:

rootLayer.sublayers = nil; 

लेकिन यह काम नहीं करता ...

आप मेरी मदद कर सकते हैं? आप से भी ज्यादा!

उत्तर

91

sublayersCALayer ऑब्जेक्ट की संपत्ति सरणी की एक प्रति लौटाती है। इसे शून्य नहीं करना sublayers के बारे में कुछ नहीं करता है। हालांकि यह करना होगा:

for (CALayer *layer in self.view.layer.sublayers) { 
    [layer removeFromSuperlayer]; 
} 

या, स्विफ्ट में

self.view.layer.sublayers?.forEach { $0.removeFromSuperlayer() } 
+6

ऐसा लगता है कि मैं गलत हूं। आप 'sublayers' को' CALayer' ऑब्जेक्ट्स के साथ पूर्ववत किए गए सरणी में सेट कर सकते हैं। मेरा समाधान अभी भी सही है, हालांकि। इसके अलावा यह ऑनलाइनर शायद काम नहीं करेगा (अनचाहे): '[self.view.layer.sublayers makeObjectsPerformSelector: @selector (removeFromSuperlayer)] ' –

+0

@SveinHalvorHalvorsen यह एक पंक्ति काम करती है। लूप – catalyst294

+0

प्लस की तुलना में यह बहुत साफ है, इसके दौरान इसे फिर से चलाने के दौरान एक सरणी को उत्परिवर्तित करना कभी-कभी समस्याग्रस्त होता है। शायद यह यहां काम करने के लिए होता है, लेकिन सामान्य रूप से यह समस्याग्रस्त हो सकता है। – Rob

20

यह मेरे लिए काम किया है और दुर्घटना तय:

[self.view.layer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)] 

मैं मेरी छवि को UImageview साथ दृश्य बदल गया है, और दुर्घटना चली गई है

2

स्विफ्ट 2.0:

for layer: CALayer in self.view.layer.sublayers! { 
     layer.removeFromSuperlayer() 
    } 

या

self.view.layer.performSelector("removeFromSuperlayer") 
9

स्विफ्ट 3.0 & स्विफ्ट 4,0

एक दृश्य से सभी sublayers दूर करने के लिए nil को sublayers संपत्ति सेट करें।

view.layer.sublayers = nil 
संबंधित मुद्दे