[英]Scale affine transformation scaling differently on iOS7 and iOS8/iOS9 in Swift
我在Swift中使用了縮放仿射變換,並注意到CGAffineTransformMakeScale
在所有iOS版本上都不起作用。 為了證明這些差異,我創建了一個新的Xcode 7項目,在iOS7設備,iOS8模擬器和iOS9模擬器上運行的Xcode Storyboard上設置了三個測試盒。
方框A - 沒有應用約束,位於故事板的中心頂部
方框B - 具有設置的高度和寬度以及中心水平和中心垂直對齊約束。
方框C - 具有設置的高度和寬度以及底部空間和中心水平對齊約束。
然后使用以下代碼將框縮放到0.5。
注意:粉色區域不是框或容器,而是用於在發生比例仿射變換后突出顯示藍色框的位置。
結果:
iOS7存在問題 - 雖然所有盒子的尺寸減半,但是兩個盒子A和C不會保持居中。
iOS8 / iOS9按預期工作 - 無論是否應用約束,所有框都會將其大小減半並保持居中。
問題:
導致此問題的原因是什么?如何才能最好地糾正和解決所有iOS7 / 8/9版本的工作方式相同?
CGAffineTransformMakeScale
上iOS7 -不能擴展的預期:-(
iOS8 / iOS9上的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()
}
}
約束和變換描述了這一點- 在iOS 8中,Auto Layout如何悄然變得易於轉換 。
基本上,在iOS7及更早版本中,您不應對轉換的不同側的值設置約束。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.