添加 textview 作为图像的子层 ios swift

add textview as a sublayer of an image ios swift

let ss = CATextLayer()
  ss.frame = rect
  ss.backgroundColor = UIColor.blue.cgColor
  ss.foregroundColor = UIColor.cyan.cgColor
  ss.string = mytextView.text
  myImage.layer.addSublayer(ss)

我正在尝试添加可编辑的文本视图作为 imageview.the 问题的子层,我无法编辑,也无法为此文本层添加手势识别器。我怎样才能让这个 textlayer 做 textview 做的事情。

只需使用 UITextViewUITextField 并将其作为子视图添加到 UIImageView,例如:

let textView = UITextView()
//configure text view like you want
//add constraints or size it as you want
myImage.addSubview(textView)

请记住 UIImageView 只是 UIView 的另一个子 class,因此您可以像常规 UIView.

一样向其添加子视图

继续你正在处理的事情,因为你添加的一些视图是 CALayers,有些将是 UIViews 或两者的子classes(对于实例 UITextViewUIView subclass)

我会向您的 class 添加两个属性:

var addedViews = [Any]()
var undoStack = [Any]()

我知道这不是很 Swift 因为你可以把任何东西放进这两个 array 但仍然。

然后当您创建一个新的 layerview 时,您还将它添加到 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()
}