2016-02-04 34 views
3

我在Swift中使用了比例仿射變換,並且注意到CGAffineTransformMakeScale在所有iOS版本上都不起作用。爲了演示這些差異,我創建了一個新的Xcode 7項目,在運行iOS7設備,iOS8模擬器和iOS9模擬器的Xcode Storyboard上設置了三個測試框。Swift中的iOS7和iOS8/iOS9上的比例仿射變換縮放比例不同

盒A - 沒有施加約束和被定位在故事板

盒乙中心頂部 - 具有的高度和寬度以及中心的水平和垂直中心對齊約束集。

方框C-具有高度和寬度以及底部空間和中心水平對準約束。

然後使用下面的代碼將盒子縮放到0.5。

注意:粉色區域不是盒子或容器,而是用於突出顯示仿射變換髮生後藍色框的位置。

結果:

iOS7有problems-而所有箱子的一半大小,兩個箱子,A和C,不到位保持居中。

iOS8/iOS9按預期工作 - 無論是否應用約束,所有盒子都將其尺寸減半並保持居中。

問題:

是什麼原因造成這個問題,怎麼能夠最佳矯正和解決,使所有iOS7/8/9版本相同的工作嗎?


CGAffineTransformMakeScale上iOS7 - 沒有規模如預期:-(

enter image description here

CGAffineTransformMakeScale iOS8上/ iOS9 - 秤預期:-)

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

} 

回答