簡體   English   中英

在Swift中的iOS7和iOS8 / iOS9上,縮放仿射變換的縮放方式不同

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM