gpt4 book ai didi

swift - animateWithDuration 未显示

转载 作者:行者123 更新时间:2023-11-30 14:04:08 27 4
gpt4 key购买 nike

我正在学习 Swift,但在从不同函数移动 UIView 时遇到问题。如果我使用这个:

View Controller :

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()
}

板 View :

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 ,也不会发生任何事情。

如何将 UIView 从与创建它的位置不同的位置移动?

最佳答案

您的原始代码虽然工作得很奇怪,但实际上是定义不明确的行为。在将 View 添加到 View 层次结构之前,不应开始对其进行动画处理。你可以逃脱惩罚,但不要这样做。

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

考虑到您的编写方式,背景的 lazy 属性可能才是您真正的意思。

正如 @dasdom 所指出的,BoardModel 对于 View 来说是一个非常糟糕的名称。这应该是 BoardView

总的来说,你的流程有点奇怪。我可能会让 BoardView 将背景添加到自身。如果 Controller 实际上将背景添加到其他 View (BoardView 除外),那么这确实很奇怪,您需要重新考虑代码结构。

关于swift - animateWithDuration 未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32619090/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com