gpt4 book ai didi

ios - 从父 UIView 移除 CALayers

转载 作者:搜寻专家 更新时间:2023-10-31 22:00:29 24 4
gpt4 key购买 nike

有几个这样的问题,但没有一个有效的答案。

我正在向 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 但调试器中没有打印任何内容。有几种这样的情况,应用程序会在删除子层后短时间内崩溃。

从父 View 中移除 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)
}
}
}

关于ios - 从父 UIView 移除 CALayers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30721649/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com