2013-07-26 64 views
1

您好,我正在與CAShapeLayerCGPath。我正在繪製拼圖,並添加到scrollview。我把重新加載按鈕來檢查性能。當我重新加載時,我將從scrollview刪除所有先前的圖層。過了一段時間後它崩潰了。從超級層中刪除崩潰後的一段時間的應用程序

殭屍顯示我刪除圖層的原因,這就是問題所在。代碼中有什麼不對嗎? 這裏是:

NSArray* layerArray = [[self.scrollView.layer sublayers]copy]; 

    for (int i = 0; i < layerArray.count; i++) { 
     A3JigsawView* aJigsawView = [layerArray objectAtIndex:i]; 
     [aJigsawView removeFromSuperlayer]; 
    } 
    self.scrollView.layer.sublayers = nil; 

    prevWidth = 0; 
    prevHeight = 0; 

請幫助我。謝謝你。

+0

你能否在應用程序崩潰時附加堆棧日誌? – Manu

+0

它沒有顯示任何東西... – user007

+0

好的比...所以我會檢查一切都在主線程中完成,也許你可以嘗試在main_queue中調度此代碼 – Manu

回答

5

這是self.scrollView.layer.sublayers = nil。不分青紅皁白地刪除所有子層會導致iOS 7中令人討厭的崩潰,這可能會在程序執行後期發生。我已使用rootLayer.sublayers = nil[rootLayer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)]進行了徹底測試。必須有一個系統創建的圖層出現混亂。

你必須保持自己的層的陣列,並刪除它們自己:

[myArrayOfLayersIAddedMyself makeObjectsPerformSelector:@selector(removeFromSuperlayer)]; 
0

我們需要保持已吸取了各自的看法層的軌道。例如: NSMutableArray * listOfCAShapeLayer;

UIBezierPath *pathToDraw = [UIBezierPath bezierPath]; 
[pathToDraw moveToPoint:startPoint]; 
[pathToDraw addLineToPoint:endPoint]; 
[pathToDraw stroke]; 

CAShapeLayer *shapeLayer = [CAShapeLayer layer]; 
shapeLayer.path = [pathToDraw CGPath]; 
shapeLayer.strokeColor = [[UIColor blueColor] CGColor]; 
shapeLayer.lineWidth = 3.0; 
shapeLayer.fillColor = [[UIColor clearColor] CGColor]; 

[self. listOfCAShapeLayer addObject:shapeLayer]; 

[self.imageView.layer addSublayer:shapeLayer]; 

現在我們把我們的CAShapeLayer保存在數組self中。 listOfCAShapeLayer 我們可以檢查一個條件,在哪裏我們想要擦除功能 如: Bool bIsErase; 如果(bISErase == YES),則執行下列操作:

[self. listOfCAShapeLayer enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){ 

CAShapeLayer *sl = obj; 
[sl removeFromSuperlayer]; 

}];

我希望這可以幫助你。

相關問題