2017-05-09 161 views
1

如何縮放CGontext而不影響它的原點,即只有寬度和高度應該縮放?如果我直接使用像下面那樣的縮放比例,它也會縮放原點。CGAffineTransform僅縮放寬度和高度

context.scaledBy(x: 2.0, y: 2.0)

有沒有一種方法來構造操縱的寬度和高度,離開原點不變的AffineTransform?

我想要一個可用於CGContextCGRect的AffineTransform。

例如一個CGRect rect = {x, y, w, h}

var t = CGAffineTransform.identity 
t = t.scaledBy(x: sx, y: sy) 
let tRect = rect.applying(t) 

tRect將是{x * sx, y * sy, w * sx, h * sy}

但我想{x, y, w * sx, h * sy}。雖然可以通過計算來實現,但我需要CGAffineTransform來完成此操作。

回答

1

您需要翻譯的起源,那麼規模,然後撤消轉換:

import Foundation 
import CoreGraphics 

let rect = CGRect(x: 1, y: 2, width: 3, height: 4) // Whatever 

// Translation to move rect's origin to <0,0> 
let t0 = CGAffineTransform(translationX: -rect.origin.x, y: -rect.origin.y) 
// Scale - <0,0> will not move, width & height will 
let ts = CGAffineTransform(scaleX: 2, y: 3) // Whatever 
// Translation to restore origin 
let t1 = CGAffineTransform(translationX: rect.origin.x, y: rect.origin.y) 

//Compound transform: 
let t = t0.concatenating(ts).concatenating(t1) 

// Test it: 
let tRect = rect.applying(t) // 1, 2, 6, 12 as required 
+0

謝謝你,它工作的CGRect,我怎麼能適用於CGContext上,因爲我們不能從CGContext上獲得產地爲初始翻譯 –

+1

無論你不想移動什麼點! – Grimxn

相關問題