Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何创建多个标签而不让它们同时消失?_Ios_Swift_Uilabel_Uiviewanimation - Fatal编程技术网

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
,如我在回答中所示。