【问题标题】:skewing a UIImageView using CGAffineTransform使用 CGAffineTransform 倾斜 UIImageView
【发布时间】:2013-09-12 17:30:27
【问题描述】:

我正在尝试倾斜一个矩形,使两个垂直边倾斜但平行,并且顶部和底部是水平的。

我正在尝试使用 CGAffineTransform 并找到此代码,但我不知道在各个部分中放置什么。

imageView.layer.somethingMagic.imageRightTop = (CGPoint){ 230, 30 };
                imageView.layer.somethingMagic.imageRightBottom = (CGPoint){ 300, 150 };

#define CGAffineTransformDistort(t, x, y) (CGAffineTransformConcat(t, CGAffineTransformMake(1, y, x, 1, 0, 0)))
#define CGAffineTransformMakeDistort(x, y) (CGAffineTransformDistort(CGAffineTransformIdentity, x, y))

虽然据说这很容易,但我不知道在不同的地方放什么。

我假设图像视图将是我想要更改的图像,但是什么会变成 somethingMagic。和 imageRightTop 和 imageRightBottom。

还有我如何定义 t。

如果有更详尽的解释,我将不胜感激,因为在大多数情况下,我发现这只是对如何使矩形倾斜的解释。

谢谢

【问题讨论】:

标签: iphone ios uiimageview cgaffinetransform


【解决方案1】:

假设您有一个名为 imageView 的变量,其中包含对您的 UIImageView 的引用。
我写了一个小示例来演示如何获得这种行为。这段代码的作用是创建一个新的CGAffineTransform 矩阵。该矩阵与单位变换矩阵具有相同的值,但有一个例外:位置 [2,1] 处的值。该值由CGAffineTransformMake 函数的c 参数控制,并控制沿x 轴的剪切。您可以通过设置shearValue来更改剪切量。

代码:

目标-C

CGFloat shearValue = 0.3f; // You can change this to anything you want
CGAffineTransform shearTransform = CGAffineTransformMake(1.f, 0.f, shearValue, 1.f, 0.f, 0.f);
[imageView setTransform:shearTransform];

斯威夫特 5

let shearValue = CGFloat(0.3) // You can change this to anything you want
let shearTransform = CGAffineTransform(a: 1, b: 0, c: shearValue, d: 1, tx: 0, ty: 0)
imageView.transform = shearTransform

这是shearTransform-matrix 的样子:

[1     0     0]  
[0.3   1     0]  
[0     0     1]   

【讨论】:

  • 这很棒。正是我需要的。但是,我已将 self.imageViewreflex.transform =CGAffineTransformMakeScale(1,-1); 应用于 uiimageView 以将其颠倒,但通过应用此代码,您的代码不再颠倒。你知道发生了什么以及如何让颠倒过来。
  • 发现这只是将第四个值更改为负数。
  • @s1m0n,哪个值提供 Y 维度的剪切?
  • @DuncanC,转置 s1m0n 的矩阵,你会得到一个 Y 维剪切
猜你喜欢
  • 2019-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-15
  • 1970-01-01
  • 2012-11-15
  • 2016-02-03
  • 1970-01-01
相关资源
最近更新 更多