CGAffineTransform用于仅缩放宽度和高度。

5
如何在不影响原点的情况下缩放CGContext,即只缩放宽度和高度?如果直接使用以下比例尺,则还会缩放原点。
context.scaledBy(x: 2.0, y: 2.0)
是否有一种构造AffineTransform的方法,可以操纵宽度和高度,同时保留原点不变?
我想要一个可用于CGContext和CGRect的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个回答

2

你需要先翻译原点,然后缩放,最后撤销翻译:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接