ios - 撤销按钮 Swift

标签 ios swift calayer undo

我有一个绘图应用程序,它使用 CALayer 子层来实际绘制图像。我目前有一个 IBAction,其中包含从超层中删除子层的代码。然而,每次我运行它时,我都会收到 BAD ACCESS 错误,导致我的应用程序崩溃。我想知道为什么它不允许我删除子层。此外,理论上,这种方法将完全移除所有层。理想情况下,我希望它只撤消绘制的最后一层。关于我应该做什么的任何建议?谢谢。

var locale: CALayer {
    return layerView.layer
}

@IBAction func undoButton(sender: AnyObject) {
    var sublayers = self.view.layer.sublayers
    for layer in sublayers {
        layer.removeFromSuperlayer()
    }   
}

func setUpLayer() -> CALayer {
    locale.contents = image
    locale.contentsGravity = kCAGravityCenter

    return locale
}

func subLayerDisplay() {
    var newLayer = CALayer()
    var tempRect = CGRectMake(prevLocation.x, prevLocation.y, 50, 50)
    newLayer.frame = tempRect
    newLayer.contents = image

    self.view.layer.insertSublayer(newLayer, below: locale)
}

最佳答案

总而言之,您可以将图层添加到 View 中,然后再处理 View ,这将使生活变得更加轻松。

当你添加按钮时,你可以这样做

view.tag = 1
self.addSubView(view)

当你想删除它时

let view = self.viewWithTag(1) as! UIView
view.removeFromSuperView()

关于ios - 撤销按钮 Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28734175/

相关文章:

ios - Firebase Crashlytics集成停留在“我们将在监听您的应用程序与我们的服务器进行通信”。的iOS

ios - .joined(分隔符:) in Swift 4/Xcode 9?

ios - 通知 iOs 推送已交付?

ios - 使用 Swift 3 在 Xcode 8 中构建适用于 WatchOS 和 iOS 的嵌入式框架

iphone - 如何使用 CATransform3DMakeRotation 从左到右旋转 View

ios - 在 Xcode for Swift 中启动屏幕

ios - UIRefreshControl 卡在返回前台 iOS 10

ios - AudioKit 问题,麦克风不够灵敏

iphone - CALayer 不渲染或绘图

iphone - -[CALayer保留] : message sent to deallocated instance