繁体   English   中英

animateWithDuration没有显示

[英]animateWithDuration is not showing

我正在学习Swift,但在将UIView从不同的功能移到我遇到了问题。 如果我使用这个:

ViewController:

let boardView = BoardView()

@IBAction func startButtonTapped(sender: UIButton) {
    view.addSubview(boardView.background)
}

类BoardView:

class BoardView : UIView {

   let multiplier: CGFloat = 0.95
   let screenSize = UIScreen.mainScreen().bounds

   var background: UIView {
      let boardSize: CGFloat = multiplier * screenSize.width
      let board = UIView(
         frame: CGRectMake(-boardSize,
         screenSize.height / 2 - boardSize / 2,
         boardSize,
         boardSize)
      )

       board.layer.cornerRadius = 8.0
       board.backgroundColor = UIColor.blackColor()
       UIView.animateWithDuration(0.15, animations: {
          board.center.x = self.screenSize.width / 2
      })
      return board
   }
}

动画有效(对我而言是违反直觉的)。 如果我尝试将UIView从另一个函数中移出,如下所示:

ViewController按钮:

@IBAction func startButtonTapped(sender: UIButton) {
    view.addSubview(boardView.background)
    boardView.moveBackground()
}

BoardView:

class BoardView : UIView {

let multiplier: CGFloat = 0.95
let screenSize = UIScreen.mainScreen().bounds

var background: UIView {
    let boardSize: CGFloat = multiplier * screenSize.width
    let board = UIView(
        frame: CGRectMake(-boardSize,
        screenSize.height / 2 - boardSize / 2,
        boardSize,
        boardSize))

    board.layer.cornerRadius = 8.0
    board.backgroundColor = UIColor.blackColor()
    return board
}

func moveBackground() {
    UIView.animateWithDuration(0.15, animations: {
        self.background.center.x = self.screenSize.width / 2
    })
 }
}

动画无效。 如果我在ViewController中使用animateWithDuration也没有任何animateWithDuration

如何将UIView从创建位置移动到另一个位置?

您的原始代码虽然工作异常,但实际上定义不正确。 在将视图添加到视图层次结构之前,不应开始对其进行动画处理。 您正在摆脱它,但不要那样做。

在您更接近正确的第二种方法中,问题在于您已将background设为非惰性计算属性。 因此,每次调用model.background ,都会得到一个不同的对象。

考虑到您是如何编写的,背景的lazy属性可能就是您真正的意思。

就像@dasdom指出的那样, BoardModel对于视图BoardModel是一个非常不好的名字。 这应该是BoardView

通常,您的流程有点奇怪。 我可能BoardView为其本身添加背景。 如果控制器实际上是将背景添加到其他视图(而不是BoardView ),那么这确实很奇怪,您需要重新考虑代码结构。

每当您访问boardModelbackground (对于视图来说这真是个坏名字!)时,都会创建并返回一个新视图。 我认为这不是您想要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM