我在Swift中使用了缩放仿射变换,并注意到CGAffineTransformMakeScale
在所有iOS版本上都不起作用。为了证明这些差异,我创建了一个新的Xcode 7项目,在iOS7设备,iOS8模拟器和iOS9模拟器上运行的Xcode Storyboard上设置了三个测试盒。
方框A - 没有应用约束,位于故事板的中心顶部
方框B - 设置高度和宽度以及中心水平和中心垂直对齐约束。
方框C - 设置高度和宽度以及底部空间和中心水平对齐约束。
然后使用以下代码将框缩放为0.5。
注意:粉色区域不是框或容器,但用于在进行比例仿射变换后突出显示蓝色框的位置。
结果:
iOS7存在问题 - 当所有盒子的尺寸减半时,两个盒子A和C不会保持居中。
iOS8 / iOS9按预期工作 - 无论是否应用约束,所有框都会将其大小减半并保持居中。
问题:
导致此问题的原因是什么?如何才能最好地纠正和解决所有iOS7 / 8/9版本的工作方式相同?
iOS7上的 CGAffineTransformMakeScale
- 未按预期扩展: - (
CGAffineTransformMakeScale
- 按预期进行扩展: - )
代码:
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()
}
}
答案 0 :(得分:3)
这由Constraints & transformations - How Auto Layout quietly became transform-friendly in iOS 8描述。
基本上,在iOS7及更早版本中,您不应对转换的不同侧面的值设置约束。