只需使用UITextView 或UITextField 并将其作为子视图添加到UIImageView,类似于:
let textView = UITextView()
//configure text view like you want
//add constraints or size it as you want
myImage.addSubview(textView)
记住UIImageView 只是UIView 的另一个子类,因此您可以像普通UIView 一样向其中添加子视图。
继续您正在处理的内容,因为您添加的一些视图是 CALayers,有些是 UIViews 或两者的子类(例如,UITextView 是 UIView 子类)
我会在你的类中添加两个属性:
var addedViews = [Any]()
var undoStack = [Any]()
我知道这不太像 Swift,因为你可以在这两个 arrays 中放入任何东西,但仍然可以。
然后当您创建一个新的layer 或view 时,您还将它添加到addedViews 数组中:
let layer = CAShapeLayer()
layer.frame = CGRect(x: 30, y: 30, width: 100, height: 100)
layer.backgroundColor = UIColor.red.cgColor
layer.transform = CATransform3DMakeRotation(0.2, 0, 0, 1)
addedViews.append(layer)
所以addedViews 数组将保存对您添加的所有视图的引用,因此当您撤消时,您可以执行以下操作:
if let viewLayer = addedViews.last {
if let view = viewLayer as? UIView {
view.removeFromSuperview()
} else if let layer = viewLayer as? CALayer {
layer.removeFromSuperlayer()
}
undoStack.append(viewLayer)
addedViews.removeLast()
}
如果您想重做更改,请执行相同的操作,但您会从 undoStack 获得最后一个视图,如下所示:
if let viewLayer = undoStack.last {
if let view = viewLayer as? UIView {
self.view.addSubview(view)
} else if let layer = viewLayer as? CALayer {
view.layer.addSublayer(layer)
}
addedViews.append(viewLayer)
undoStack.removeLast()
}