gpt4 book ai didi

ios - 添加 TextView 作为图像的子层 ios swift

转载 作者:行者123 更新时间:2023-11-28 23:55:41 25 4
gpt4 key购买 nike

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 做 textview 做的事情。

最佳答案

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

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

请记住 UIImageView 只是 UIView 的另一个子类,因此您可以像普通 UIView 一样向其添加 subview 。


继续你正在处理的事情,因为你添加的一些 View 是 CALayer,一些将是 UIView 或两者的子类(例如 UITextViewUIView 的子类)

我会在你的类中添加两个属性:

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 数组将保存对您添加的所有 View 的引用,因此当您撤消时,您可以执行以下操作:

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 得到最后一个 View ,就像这样:

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()
}

关于ios - 添加 TextView 作为图像的子层 ios swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51284888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com