将UIView.transform设置为任意翻译CGAffineTransform不执行任何操作

时间:2015-12-04 18:51:01

标签: ios swift uiview rendering cgaffinetransform

我有UIView名为container,我想使用仿射变换来移动(偏移)。此视图包含UIImageView,是UICollectionViewCell的子视图。

所以应该很简单

container.transform = CGAffineTransformMakeTranslation(100, 200) //render container 100 points right and 200 points down

非常难,因为该代码不会执行任何。该视图在同一个地方激动地呈现,就像我删除该行一样。所以我添加了' print'验证设置的仿射翻译:

container.transform = CGAffineTransformMakeTranslation(100, 200)
print(container.transform) //prints: CGAffineTransform(a: 1.0, b: 0.0, c: 0.0, d: 1.0, tx: 100.0, ty: 200.0)

那似乎没事。因此,我尝试使用container转换CGAffineTransformMakeRotation视图,并根据documentation旋转视图,而不是围绕其中心旋转。我尝试了不同的平移,旋转和缩放变换组合,只是为了发现仿射变换矩阵设置正常,但属性txty似乎被忽略了a, b, c和{{1似乎使用不同的锚点然后使用视图的中心(不能说那个点是什么)。

关于可能导致此问题以及如何解决问题的任何想法?

1 个答案:

答案 0 :(得分:0)

必须有像汽车布局这样的东西搞砸了。在没有外部影响的情况下,将视图的仿射变换设置为CGAffineTransformMakeTranslation(100,200)将使其向右移动100点并向下移动200.我通过在Xcode中创建新的单视图项目并更改ViewController中的viewDidLoad方法来验证这一点。快速上课:

override func viewDidLoad()
{
    super.viewDidLoad()

    view.backgroundColor = UIColor.blueColor();

    let container = UIView(frame: CGRectMake(0,0,100,100));
    container.backgroundColor = UIColor.greenColor();
    container.transform = CGAffineTransformMakeTranslation(100, 200);
    view.addSubview(container);
}

正如预期的那样,绿色容器视图显示在右侧100点,向下200点,即使其框架为(0,0,100,100)。

因此,请检查自动布局和其他可能影响此视图位置的事情,如果找不到任何内容,请发布更多代码。此外,如果您的容器视图没有背景颜色,请给它一个,以便您可以直接看到它的位置,而不是通过查看图像视图来推断它的位置。

n.b。设置视图的变换实际上并不会移动视图本身,而只是改变它绘制内容的方式/位置。