从父 UIView 移除 CALayers
Remove CALayers from Parent UIView
有几个这样的问题,但没有一个有效的答案。
我正在向 UIView 添加新的 CALayer,如下所示:
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)
}
并尝试通过以下方式删除它们:
func deleteDrawing() {
for layer in self.drawingView.layer.sublayers {
layer.removeFromSuperlayer()
}
}
这成功删除了图像,但应用程序在下次触摸屏幕时崩溃,调用了 main 但调试器中没有打印任何内容。有几种情况是这样的,在移除子层后应用程序会在短时间内崩溃。
从父视图中删除 CALayer 的正确方法是什么?
我认为错误是您删除了所有子层,而不是您添加的子层。
保留 属性 以保存您添加的子层
var layerArray = NSMutableArray()
那就试试
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)
}
}
}
更新Leo Dabus建议,您也可以只设置图层名称。
newPic.name = "1234"
然后检查
func deleteDrawing() {
for layer in self.drawingView.layer.sublayers {
if(layer.name == "1234"){
layerArray.removeObject(layer)
}
}
}
有几个这样的问题,但没有一个有效的答案。
我正在向 UIView 添加新的 CALayer,如下所示:
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)
}
并尝试通过以下方式删除它们:
func deleteDrawing() {
for layer in self.drawingView.layer.sublayers {
layer.removeFromSuperlayer()
}
}
这成功删除了图像,但应用程序在下次触摸屏幕时崩溃,调用了 main 但调试器中没有打印任何内容。有几种情况是这样的,在移除子层后应用程序会在短时间内崩溃。
从父视图中删除 CALayer 的正确方法是什么?
我认为错误是您删除了所有子层,而不是您添加的子层。 保留 属性 以保存您添加的子层
var layerArray = NSMutableArray()
那就试试
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)
}
}
}
更新Leo Dabus建议,您也可以只设置图层名称。
newPic.name = "1234"
然后检查
func deleteDrawing() {
for layer in self.drawingView.layer.sublayers {
if(layer.name == "1234"){
layerArray.removeObject(layer)
}
}
}