有几个问题像这样漂浮,但没有答案可行.
我正在为这样的UIView添加新的CALayers:
func placeNewPicture() {
let newPic = CALayer()
newPic.contents = self.pictureDragging.contents
newPic.frame = CGRect(x: pictureScreenFrame.origin.x - pictureScreenFrame.width/2, y: pictureScreenFrame.origin.y - pictureScreenFrame.height/2, width: pictureScreenFrame.width, height: pictureScreenFrame.height)
self.drawingView.layer.addSublayer(newPic)
}
Run Code Online (Sandbox Code Playgroud)
并试图删除它们:
func deleteDrawing() {
for layer in self.drawingView.layer.sublayers {
layer.removeFromSuperlayer()
}
}
Run Code Online (Sandbox Code Playgroud)
这会成功删除图像,但下次触摸屏幕时应用程序会崩溃,调用main但调试器中没有打印任何内容.有几种这样的情况,在删除子图层后,应用程序会在短时间内崩溃.
从父视图中删除CALayers的正确方法是什么?
我认为错误是你删除了所有子图层,而不是你添加的子图层.保留一个属性以保存您添加的子图层
var layerArray = NSMutableArray()
Run Code Online (Sandbox Code Playgroud)
然后试试
func placeNewPicture() {
let newPic = CALayer()
newPic.contents = self.pictureDragging.contents
newPic.frame = CGRect(x: pictureScreenFrame.origin.x - pictureScreenFrame.width/2, y: pictureScreenFrame.origin.y - pictureScreenFrame.height/2, width: pictureScreenFrame.width, height: pictureScreenFrame.height)
layerArray.addObject(newPic)
self.drawingView.layer.addSublayer(newPic)
}
func deleteDrawing() {
for layer in self.drawingView.layer.sublayers {
if(layerArray.containsObject(layer)){
layer.removeFromSuperlayer()
layerArray.removeObject(layer)
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用Leo Dabus更新建议,您也可以设置图层名称.
newPic.name = "1234"
Run Code Online (Sandbox Code Playgroud)
然后检查
func deleteDrawing() {
for layer in self.drawingView.layer.sublayers {
if(layer.name == "1234"){
layerArray.removeObject(layer)
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5193 次 |
| 最近记录: |