我想创建一个动态文本模板供用户在iOS中键入。
以下是一些示例图片:
我曾经尝试过这样做,但我不知道这样做是正确的方法。
var borderWidth: CGFloat = 5.0
var view = UIView(frame: CGRect(x: 20, y: 60, width: 250, height: 100))
view.layer.borderColor = UIColor.white.cgColor
view.layer.borderWidth = borderWidth
labelTemplate.addSubview(view)
var mask = UIView(frame: CGRect(x: 20, y: 60, width: 260, height: view.frame.size.height-50))
mask.backgroundColor = UIColor.black
view.layer.mask = mask.layer
我应该如何创建允许用户将其字符串输入文本模板的内容?我应该在UILabel / UITextField后面添加UIImageView来创建吗?
答案 0 :(得分:0)
如果模板的文本位置固定,则只需将UITextField
放在应该放置的位置,然后让用户在此处输入文本,并在需要时限制最大字符数。
如果您的模板包含图形元素,则可以,在输入字段后添加UIImageView
。
至于您的代码,请避免使用框架设置元素尺寸和位置,autolayout是可行的方法。
答案 1 :(得分:-1)
var backView: UIView!
var labelView: UILabel!
var maskPath: UIBezierPath!
var maskLayer: CAShapeLayer!
override func viewDidLoad() {
super.viewDidLoad()
backView = UIView()
self.view.addSubview(backView)
//do the constraints
backView.backgroundColor = .red
labelView = UILabel()
self.view.addSubview(labelView)
//do the constraints
labelView.text = "Seven sticks of dynamite"
labelView.font = UIFont.init(name: labelView.font.fontName, size: 34)
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
maskPath = UIBezierPath.init(rect: labelView.frame) // OR maskPath = UIBezierPath.init(rect: CGRect.init(x: labelView.frame.minX - 20, y: labelView.frame.minY - 20, width: labelView.bounds.width + 40, height: labelView.bounds.height + 40))
maskLayer = CAShapeLayer.init()
maskLayer.path = maskPath.cgPath
backView.layer.mask = maskLayer
}
根据您在应用程序中的需要,backView可以是单色或图像,可以在添加到控制器的labelView周围制作蒙版。