gpt4 book ai didi

ios - 在 Swift 的 iOS7 和 iOS8/iOS9 上以不同方式缩放仿射变换

转载 作者:搜寻专家 更新时间:2023-10-31 22:33:15 25 4
gpt4 key购买 nike

我在 Swift 中使用比例仿射变换并注意到 CGAffineTransformMakeScale 在所有 iOS 版本上的工作方式不同。为了演示差异,我创建了一个新的 Xcode 7 项目,在运行在 iOS7 设备、iOS8 模拟器和 iOS9 模拟器上的 Xcode Storyboard 上设置了三个测试框。

方框 A - 未应用任何约束,位于 Storyboard 的顶部中心

框 B - 设置了高度和宽度以及居中水平和居中垂直对齐约束。

盒子 C - 设置了高度和宽度以及底部空间和中心水平对齐约束。

然后使用以下代码将框缩放到 0.5。

注意:粉色区域不是盒子或容器,而是用于在发生比例仿射变换后突出显示蓝色盒子的位置。

结果:

iOS7 存在问题 - 虽然所有盒子的尺寸减半,但两个盒子 A 和 C 没有保持居中。

iOS8/iOS9 按预期工作 - 无论是否应用约束,所有框的大小都减半并保持居中。

问题:

是什么导致了这个问题?如何才能最好地纠正和解决这个问题,以便所有 iOS7/8/9 版本都可以相同地工作?


iOS7 上的

CGAffineTransformMakeScale - 未按预期缩放:-(

enter image description here

iOS8/iOS9 上的

CGAffineTransformMakeScale - 按预期缩放 :-)

enter image description here


代码:

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var ButtonA: UIButton!
@IBOutlet weak var ButtonB: UIButton!
@IBOutlet weak var ButtonC: UIButton!

@IBAction func ButtonScale(sender: AnyObject) {
self.ButtonA.transform = CGAffineTransformMakeScale(0.5, 0.5)
self.ButtonB.transform = CGAffineTransformMakeScale(0.5, 0.5)
self.ButtonC.transform = CGAffineTransformMakeScale(0.5, 0.5)
}

override func viewDidLoad() {
super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}

}

最佳答案

这由 Constraints & transformations - How Auto Layout quietly became transform-friendly in iOS 8 描述.

基本上,在 iOS7 和更早版本中,您不应该对转换不同端的值设置约束。

关于ios - 在 Swift 的 iOS7 和 iOS8/iOS9 上以不同方式缩放仿射变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35207177/

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