首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将UIView.transform设置为任意翻译,CGAffineTransform什么也不做

问将UIView.transform设置为任意翻译,CGAffineTransform什么也不做
EN

Stack Overflow用户
提问于 2015-12-04 18:51:01
回答 1查看 1.4K关注 0票数 0

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

所以应该很简单

代码语言:javascript
复制
container.transform = CGAffineTransformMakeTranslation(100, 200) //render container 100 points right and 200 points down

相反,这是非常困难的,因为it代码什么也不做。视图呈现在相同的位置,就好像我删除了该行一样。因此,我添加了“print”来验证设置了哪些仿射翻译:

代码语言:javascript
复制
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旋转视图,它只是旋转视图,而不是按照文档的要求围绕视图的中心旋转。我尝试了平移、旋转和尺度变换的不同组合,只是为了发现仿射变换矩阵集是可以的,但是属性tx和ty似乎被忽略了,a, b, c和d似乎使用了不同的锚点,然后视图的中心(不能说出那个点是什么)。

有什么可以导致这一问题的想法,以及如何解决它?

EN

回答 1

Stack Overflow用户

发布于 2015-12-04 20:08:56

一定有什么东西像汽车布局给你搞砸了。在不受外界影响的情况下,将视图的仿射变换设置为CGAffineTransformMakeTranslation( 100,200)将使视图右移100点,向下移动200点。通过在Xcode中创建一个新的单一视图项目并将ViewController.swift类中的ViewController.swift方法更改为:

代码语言:javascript
复制
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,100,100)。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34095443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档