Ios 如何创建多个标签而不让它们同时消失?
我使用下面的代码在每次按下按钮时创建一个标签,然后将标签移动到特定位置,然后将其删除 我的问题是它无法创建多个标签,因为它删除标签的速度太快,因为它删除了所有名为Ios 如何创建多个标签而不让它们同时消失?,ios,swift,uilabel,uiviewanimation,Ios,Swift,Uilabel,Uiviewanimation,我使用下面的代码在每次按下按钮时创建一个标签,然后将标签移动到特定位置,然后将其删除 我的问题是它无法创建多个标签,因为它删除标签的速度太快,因为它删除了所有名为label的内容 如何修复此问题,使其创建多个标签,只有当标签单独完成动画时才会删除这些标签? 我想到了一个解决方案,但不知道是在哪里让它创建一个具有不同名称的标签,如label1、label2等,这样它可以在完成动画时删除特定标签,而不是删除所有标签 let label = UILabel(frame: CGRect(x: 0, y:
label
的内容
如何修复此问题,使其创建多个标签,只有当标签单独完成动画时才会删除这些标签?
我想到了一个解决方案,但不知道是在哪里让它创建一个具有不同名称的标签,如label1、label2等,这样它可以在完成动画时删除特定标签,而不是删除所有标签
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
func createLabel() {
// Find the button's width and height
let labelWidth = label.frame.width
// Find the width and height of the enclosing view
let viewWidth = self.view.frame.width
// Compute width and height of the area to contain the button's center
let xwidth = viewWidth - labelWidth
// Generate a random x and y offset
let xoffset = CGFloat(arc4random_uniform(UInt32(xwidth)))
// Offset the button's center by the random offsets.
label.center.x = xoffset + labelWidth / 2
label.center.y = 300
label.font = UIFont(name:"Riffic Free", size: 18.0)
label.textColor = UIColor.white
label.textAlignment = .center
label.text = "+1"
self.view.addSubview(label)
}
func clearLabel() {
UIView.animate(withDuration: 0.9, delay: 0.4, usingSpringWithDamping: 1.0, initialSpringVelocity: 0.0, options: .curveLinear, animations: {
self.label.center = CGPoint(x: 265, y: 75 )
}, completion: { (finished: Bool) in
self.label.removeFromSuperview()
})
}
@IBAction func clicked(_ sender: Any) {
createLabel()
clearLabel()
}
此代码存在问题:
@IBAction func clicked(_ sender: Any) {
createLabel()
clearLabel()
}
有两个问题。首先,在给标签一个成为界面一部分的机会之前,您正在进行动画和移除。您需要引入延迟(您可以使用我的delay
实用程序,):
第二个问题,正如您所说的,是您有一个label
实例变量,用于在createLabel
和clearLabel
之间共享标签。因此,动画期间无法出现另一个标签
但实际上并不需要任何实例变量。所以,彻底摆脱你的标签
声明吧!相反,修改createLabel
,使其实际创建标签(即调用UILabel(frame:CGRect(x:0,y:0,width:100,height:100))
)作为局部变量,然后返回对其创建的标签的引用,如下所示:
func createLabel() -> UILabel {
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
// ...
return label
}
func clearLabel(_ label : UILabel) {
// ...
}
。。。然后让clearLabel
将同一标签作为参数,以便它移动该标签并在动画结束时将其删除,如下所示:
func createLabel() -> UILabel {
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
// ...
return label
}
func clearLabel(_ label : UILabel) {
// ...
}
因此,单击的实现将如下所示,将标签从createLabel
传递到clearLabel
:
@IBAction func clicked(_ sender: Any) {
let label = self.createLabel()
delay(0.1) {
self.clearLabel(label)
}
}
(修改createLabel
和clearLabel
以实现该功能的其余细节留给读者作为练习。)
现在,每次点击按钮都会创建、设置动画并移除一个新标签,与之前可能发生的任何事情无关
我将Click更改为您建议的并实现了延迟功能。我不明白您对createLabel
的修改是什么意思,你能详细说明一下吗?我不知道如何修改createLabel
并创建参数函数,因为如果删除label
的声明,那么label函数的随机位置繁殖将无法工作。你能发布代码来配合它吗?你能用你的clearLabel
代码更新你的答案吗?clearLabel
没有明显的变化。也没有创建标签。基本上我一直在使用你的代码。clearLabel
的唯一区别是现在没有self.label
;相反,有一个标签作为参数传递到clearLabel
,如我在回答中所示。