[英]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
),那么这确实很奇怪,您需要重新考虑代码结构。
每当您访问boardModel
的background
(对于视图来说这真是个坏名字!)时,都会创建并返回一个新视图。 我认为这不是您想要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.