添加 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 做的事情。
只需使用 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
的另一个子 class,因此您可以像常规 UIView
.
一样向其添加子视图
继续你正在处理的事情,因为你添加的一些视图是 CALayer
s,有些将是 UIView
s 或两者的子classes(对于实例 UITextView
是 UIView
subclass)
我会向您的 class 添加两个属性:
var addedViews = [Any]()
var undoStack = [Any]()
我知道这不是很 Swift 因为你可以把任何东西放进这两个 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
获得最后一个视图,如下所示:
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()
}
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 做的事情。
只需使用 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
的另一个子 class,因此您可以像常规 UIView
.
继续你正在处理的事情,因为你添加的一些视图是 CALayer
s,有些将是 UIView
s 或两者的子classes(对于实例 UITextView
是 UIView
subclass)
我会向您的 class 添加两个属性:
var addedViews = [Any]()
var undoStack = [Any]()
我知道这不是很 Swift 因为你可以把任何东西放进这两个 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
获得最后一个视图,如下所示:
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()
}