gpt4 book ai didi

ios - 如何在应用 CGAffineTransform(translationX) 后对 UIView 的框架进行单元测试

转载 作者:行者123 更新时间:2023-11-28 10:55:58 25 4
gpt4 key购买 nike

我想使用 Quick 测试以下方法:

func initial(states: UIView...) {
for view in states {
view.transform = CGAffineTransform(translationX: 0, y: 20)
}
}

这是我用于测试的代码(简化版):

class ProtocolsSpec: QuickSpec {    
override func spec() {
var view1: UIView!
var view2: UIView!

describe("Animator") {
beforeEach {
view1 = UIView(frame: CGRect(x: 50, y: 50, width: 50, height: 50))
view2 = UIView(frame: CGRect(x: 80, y: 80, width: 50, height: 50))
}

it("views origin should be (0, 20) at startup") {
initial(states: view1, view2)

expect(view1.frame.origin.x) == 0
expect(view1.frame.origin.y) == 20
}
}
}
}

测试不起作用,x 和 y 没有改变。
我的问题是如何在应用转换后获得正确的 (x,y) 坐标?

最佳答案

framecenterbounds 属性在应用转换后不会改变。 frame 的文档甚至指出:

If the transform property is not the identity transform, the value of this property is undefined and therefore should be ignored.

API Reference

为了获得有效的框架,我建议将 View 转换应用于 View 框架(使用CGRect 上的applying(_:) 方法)。在您的情况看起来像:

let resultingFrame = view1.frame.applying(view1.transform)
expect(resultingFrame.origin.x) == 0
expect(resultingFrame.origin.y) == 20

关于ios - 如何在应用 CGAffineTransform(translationX) 后对 UIView 的框架进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43557532/

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