UIView 没有名为 "inertia" 的成员

UIView does not have a member named, "inertia"

我正在尝试以编程方式创建一个按钮,该按钮在点击时会淡出,更改文本,然后淡入。但是,当我尝试编写淡入淡出动画的代码时,出现错误,“'UIView'没有成员名字叫'inertia'当然惯性是按钮的名字

这是我创建按钮的代码,它在 viewDidLoad() 函数中调用的函数中:

var inertia = UIButton.buttonWithType(UIButtonType.System) as UIButton
    inertia.frame = CGRectMake(firstView.frame.width/2-(inertia.frame.width/2), firstView.frame.height/10, firstView.frame.width, firstView.frame.height/10)
    inertia.frame = CGRectMake(firstView.frame.width/2-(inertia.frame.width/2), firstView.frame.height/10, firstView.frame.width, firstView.frame.height/10)
    inertia.setTitle("Newton's First Law of Motion", forState: UIControlState.Normal)
    inertia.addTarget(self, action: "tapped:", forControlEvents: .TouchUpInside)
    self.firstView.addSubview(inertia)

这是我到目前为止点击按钮时发生错误的代码行:

UIView.animateWithDuration(0.4, animations: {self.firstView.inertia.alpha = 0})

我相信我在创建按钮时遗漏了一些东西,因为当我从情节提要中为按钮创建出口时,淡入淡出动画不会产生错误。

请帮我解决这个问题,因为我会经常使用它。另外,如果你能找到一种方法让我正确地创建按钮的框架而不必声明它两次,那也会很有帮助。

我尝试过的(无济于事):

我在var inertia

后面放了: UIButton!

我试过`UIView.animateWithduration(0.4, 动画: {self.inertia.alpha = 0})

只是为了分解问题行,具体来说 self.firstView.inertia.alpha。 Self 显然是你所在的任何 class 实例。我从你报告的错误和你的代码中假设 firstView 是一个 UIView。现在您已将惯性添加为 firstView 的子视图,但这不会在视图上创建 属性 命名惯性。也就是说,没有firstView.inertia。 firstView 有一个子视图属性,它是一个任意对象的数组。

换句话说,您创建并称为 inertia 的按钮现在位于数组 firstView.subviews 中的某个位置,但很难说具体位置取决于它作为子视图的其他视图数量。

您可以遍历子视图数组以找到您之前称为惯性的按钮,但仅保留对惯性的引用可能更简单。您可以在 class 中将其设置为 属性 (如果只有一个这样的按钮)并使用

调用您的代码
UIView.animateWithDuration(0.4, animations: {self.inertia.alpha = 0})

根据您的描述,我了解到您的代码如下所示:

class ViewController:UIViewController {
var firstView:UIView!



func tapped(button: UIButton) {
    UIView.animateWithDuration(0.4) { self.firstView.inertia.alpha = 0 }
}


override func viewDidLoad() {
    super.viewDidLoad()

    var inertia = UIButton.buttonWithType(UIButtonType.System) as UIButton
    inertia.frame = CGRectMake(firstView.frame.width/2-(inertia.frame.width/2), firstView.frame.height/10, firstView.frame.width, firstView.frame.height/10)
    inertia.frame = CGRectMake(firstView.frame.width/2-(inertia.frame.width/2), firstView.frame.height/10, firstView.frame.width, firstView.frame.height/10)
    inertia.setTitle("Newton's First Law of Motion", forState: UIControlState.Normal)
    inertia.addTarget(self, action: "tapped:", forControlEvents: .TouchUpInside)
    self.firstView.addSubview(inertia)
}

}

现在,您会收到该错误,因为 inerta 未在 class 中声明为 属性,您只能在函数中创建它。如果您想在 tapped() 中按下时使用该按钮,则只需更改:

UIView.animateWithDuration(0.4) { self.firstView.inertia.alpha = 0 }
// To
UIView.animateWithDuration(0.4) { button.alpha = 0 } // When TouchUpInside the button will pass itself

或者您可以通过添加以下内容使其成为 属性:

var inertia:UIButton! // Under class ...

并在设置时去掉viewDidLoad中的var