let ss = CATextLayer()
ss.frame = rect
ss.backgroundColor = UIColor.blue.cgColor
ss.foregroundColor = UIColor.cyan.cgColor
ss.string = mytextView.text
myImage.layer.addSublayer(ss)
我正在尝试将可编辑的textview添加为imageview的子层。问题是,我无法编辑,也无法为该textlayer添加手势识别器。我该如何使该Textlayer完全执行TextView的工作。
答案 0 :(得分:1)
只需使用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
一样向其添加子视图。
继续您要处理的内容,因为您添加的某些视图是CALayer
,有些将是UIView
或两者的子类(例如UITextView
是{ {1}}子类)
我会在您的课程中添加两个属性:
UIView
我知道这不是很迅速,因为您可以将任何东西都放入这两个var addedViews = [Any]()
var undoStack = [Any]()
中。
然后,当您创建新的array
或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